Python + Pandas:为csv-file

时间:2017-09-26 16:51:11

标签: python pandas csv

我有一个看起来像这样的csv文件

Date,A,B,C,...,X
2016/04,ColA,ColB,ColC,...,ColX
2016/05,ColA,ColB,ColC,...,ColX
2016/06,ColA,ColB,ColC,...,ColX
2016/07,ColA,ColB,ColC,...,ColX
2016/08,ColA,ColB,ColC,...,ColX
2016/09,ColA,ColB,ColC,...,ColX
2016/10,ColA,ColB,ColC,...,ColX
2016/11,ColA,ColB,ColC,...,ColX
2016/12,ColA,ColB,ColC,...,ColX

和一个创建如下列表的函数:

['2016/08', 67287800000.00001, '2016/09', -22714300000.0, '2016/10', 97335100000.0, '2016/11', 97579300000.0, '2016/12', 97723900000.0]

这些列表将传递给以下函数

def write_graph_data(cat, data_list, column):
    if len(data_list) > 0:
        row_num = 0

        for row in pd.read_csv('./data/%s_f.csv' % cat, sep=',', error_bad_lines=False, chunksize=1, header=0):
            date = row.at[row_num,'Date']

            if date == data_list[0]:
                row[column] = data_list[1]
                data_list.pop(0)
                data_list.pop(0)

            row_num += 1

此函数逐行读取csv文件,并且每行检查“日期”列中的值。如果该值与第一个列表条目相同,则第二个列表条目将添加到新列中的行中,如下所示

2016/08,ColA,ColB,ColC,...,ColX,67287800000.00001

如何使用更改的行保存我的csvfile?

1 个答案:

答案 0 :(得分:0)

你可以尝试在熊猫中连接

lst = ['2016/08', 67287800000.00001, '2016/09', -22714300000.0, '2016/10', 97335100000.0, '2016/11', 97579300000.0, '2016/12', 97723900000.0]
df1 = pd.read_csv('./data/%s_f.csv' % cat, sep=',', error_bad_lines=False, chunksize=1, header=0)
df2 = pd.DataFrame(zip(lst[::2], lst[1::2]),columns=['Date','val'])

new_df = pd.concat([df1.set_index('Date'),df2.set_index('Date')], axis =1)

new_df.to_csv('new_file.csv')

输出:

        A     B     C  ...     X           val
2016/04  ColA  ColB  ColC  ...  ColX           NaN
2016/05  ColA  ColB  ColC  ...  ColX           NaN
2016/06  ColA  ColB  ColC  ...  ColX           NaN
2016/07  ColA  ColB  ColC  ...  ColX           NaN
2016/08  ColA  ColB  ColC  ...  ColX  6.728780e+10
2016/09  ColA  ColB  ColC  ...  ColX -2.271430e+10
2016/10  ColA  ColB  ColC  ...  ColX  9.733510e+10
2016/11  ColA  ColB  ColC  ...  ColX  9.757930e+10
2016/12  ColA  ColB  ColC  ...  ColX  9.772390e+10