2017-09-26 69 views
0

我有一个csvfile它看起来像这样的Python +熊猫:以特定的行添加值csvfile

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文件,并为每一行检查t中的值他'日期'栏。如果值是一样的第一个列表项第二个列表项将被添加到该行中新的一列这样

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

我怎样才能挽救我的csvfile与更改的行(S)?

回答

0

可以尝试的concat在大熊猫

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 
+0

不得不改变 'DF2 = pd.DataFrame(拉链(LST [:: 2],LST [1: (列表(zip(lst [:: 2],lst [1 :: 2])),columns = ['Date','val'])'到 'df2 = pd.DataFrame ['Date',column])' 作品很有魅力,非常感谢 – chris