繁体   English   中英

将非结构化的csv读取到Python Pandas数据帧中

[英]Reading a unstructured csv into Python Pandas dataframe

我有一个非结构化的csv文件,我想将其读入Pandas数据框。

这是示例csv:

customer_id,123,acct1,1000,10,acct2,2000,20,acct3,3000,30 customer_id,456,acct1,4000,40,acct2,5000,50 customer_id,789,acct3,6000,60 customer_id,888,acct1,7000,,acct2,,70 customer_id,999

每行代表一个客户,与该客户相关联的帐户以及与该客户帐户相关的变量。 客户没有相同的帐户,因此不能保证我们使用相同的帐户。

如果存在帐户,则帐户名称后将有预定数量的变量(在这种情况下,每个帐户2个)。 但是,即使存在帐户,也可能会缺少与该帐户相关的某些变量(例如,customer_id为888)。

如果客户没有帐户,则该帐户将不会出现在该客户的记录中。

所需的数据框如下所示:

customer_id | acct1_bal | acct_1_del | acct2_bal | acct_2_del | acct3_bal | acct_3_del | 123 | 1000 | 10 | 2000 | 20 | 3000 | 30 | 456 | 4000 | 40 | 5000 | 50 | NaN | NaN | 789 | NaN | NaN | NaN | NaN | 6000 | 60 | 888 | 7000 | NaN | NaN | 70 | NaN | NaN | 999 | NaN | NaN | NaN | NaN | NaN | NaN |

上面的数据框将有七列。 它将使用不存在帐户或缺少帐户变量的NaN填充。

谢谢!

在此处输入图片说明 通过使用熊猫,您将通过这种方式获得理想的结果:您可以根据自己的使用来优化代码,

import csv, json
import pandas as pd

raw_data = {}
with open('input_dataframe.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    raw_data['customer_id'] = []
    raw_data['acct1_bal'] = []    
    raw_data['acct_1_del'] = []
    raw_data['acct2_bal'] = []
    raw_data['acct_2_del'] = []
    raw_data['acct3_bal'] = []
    raw_data['acct_3_del'] = []
    for row in spamreader:
        raw_data['customer_id'].append((row[0]).split(',')[1])
        raw_data['acct1_bal'].append((row[0]).split(',')[3])
        raw_data['acct_1_del'].append((row[0]).split(',')[4])
        raw_data['acct2_bal'].append((row[0]).split(',')[6])
        raw_data['acct_2_del'].append((row[0]).split(',')[7])
        raw_data['acct3_bal'].append((row[0]).split(',')[9])
        raw_data['acct_3_del'].append((row[0]).split(',')[10])

df = pd.DataFrame(raw_data, columns = ['customer_id', 'acct1_bal', 'acct_1_del', 'acct2_bal', 'acct_2_del', 'acct3_bal', 'acct_3_del']).replace('','NaNs')
df.to_csv('output_dataframe.csv')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM