python - 重新排列 CSV 数据

标签 python csv

我有 2 个具有不同列顺序的 csv 文件。例如第一个文件以 10 位手机号码开头,而该列在第二个文件中位于第 4 位。 我需要将所有客户数据合并到一个 csv 文件中。列的顺序应如下所示:

mobile pincode model Name Address Location pincode date

mobile  Name    Address Model   Location    pincode Date
9845299999  Raj Shah    nagar No 22 Rivi Building 7Th Main I    Crz Mumbai      17/02/2011
9880877777  Managing Partner M/S Aitas  # 1010, 124Th Main, Bk Stage.  -    Bmw 320 D   Hyderabad   560070  30-Dec-11


Name    Address Location    mobile  pincode Date    Model   
Asvi Developers pvt Ltd fantry Road Nariman Point, 1St Floor, No. 150   Chennai 9844066666      13/11/2011  Crz 
L R Shiva Gaikwad & Sudha Gaikwad   # 42, Suvarna Mansion, 1St Cross, 17Th Main, Banjara Hill, B S K Stage,-    Bangalore   9844233333  560085  40859   Mercedes_E 350 Cdi  

第二个任务可能有点困难,因为预期的新文件可能具有完全不同的列顺序。在那种情况下,我需要提取 10 位手机号码和 6 位密码列。如果它与任何给定的城市列表匹配,我需要编写代码来猜测城市列。新文件应具有相关的列标题,但列标题可能略有不同。例如“客户地址”而不是“地址”。我该如何处理此类数据?

sed 's/.*\([0-9]\{10\}\).*/\1,&/' input

有人建议我使用 sed 重新排列开头的 10 位数字列。但我确实还需要重新排列文本列。例如如果一列与以下列表中的条目匹配,那么它无疑是模型列。

['Crz', 'Bmw 320 D', 'Benz', 'Mercedes_E 350 Cdi', 'Toyota_Corolla He 1.8']

如果任何一列与上面列表中的条目的 10% 相匹配,那么它就是一个“模型”列并且应该在数字 3 后面是手机和密码。

最佳答案

对于您的第一个问题,我建议使用 pandas 加载这两个文件,然后进行连接。之后,您可以重新排列列。

import pandas as pd
dataframe1 = pd.read_csv('file1.csv')
dataframe2 = pd.read_csv('file2.csv')
combined = pd.concat([dataframe1, dataframe2]) #the columns will be ordered alphabetically

为了得到想要的订单,

result_df = combined[['mobile', 'pincode', 'model', 'Name', 'Address', 'Location', 'pincode', 'date']]

然后 result_df.to_csv('oupput.csv', index=False) 导出到 csv 文件。

对于第二个,你可以这样做(假设你已经像上面那样将一个 csv 文件加载到 df 中)

match_model = lambda m: m in ['Crz', 'Bmw 320 D', 'Benz', 'Mercedes_E 350 Cdi',   'Toyota_Corolla He 1.8']

for c in df:
    if df[c].map(match_model).sum()/len(df) > 0.1:
        print "Column %s is 'Model'"% c
        df.rename(columns={c:'Model'}, inplace=True)

如果需要,您可以修改匹配函数 match_model 以使用正则表达式。

关于python - 重新排列 CSV 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23456734/

相关文章:

java - 使用外部点查找矩形内部

python - 有没有办法从导入的模块中获取 'parent' 模块的名称?

python - 在 Python 中使用 httplib 连接到网站

python - Tornado set_secure_cookie unicode 错误

csv - Logstash将所有内容放入所有Elasticsearch索引中

amazon-web-services - AWS Sagemaker无法解析csv

java - 在java中将嵌套Json文件转换为CSV

python - 使用pip时异常导入SSLError,InsecurePlatformWarning,python3.4 win32

python - 子类化 dict : should dict. __init__() 被调用?

r - 如何使用 tidyverse map 在 R 中迭代过滤并写入 csv