我报废了数据并导出为csv文件。 为简单起见,数据如下所示 (我故意放任意变量以说明一个例子):
id var1 var2 var3 ...
A 10 14 355 ...
B 35 56 22 ...
C 95 22 222 ...
D 44 55 222 ...
由于我每天收集数据,因此我将文件名保存为city_20180814_result.csv 例如,如果我于2018年8月14日在纽约市收集了数据,则对应的文件名为NYC_20180814_result.csv
在这里,我想在每个csv文件中添加一个新列,即date变量。 所需的示例将类似于以下示例。具体来说,我想在每个csv文件中添加一个日期(格式为YYYYMMDD)列,并且这些值将成为收集数据的日期。例如,以下示例csv文件是在2018年8月14日生成的,则更新后的数据将如下所示:
id date var1 var2 var3 ...
A 20180814 10 14 355 ...
B 20180814 35 56 22 ...
C 20180814 95 22 222 ...
D 20180814 44 55 222 ...
执行此操作的常规方法是打开每个csv文件并手动添加新列,为所有行分配一个对应的日期,然后对所有csv文件重复此步骤。但是有太多的事情要做。有什么办法可以有效地做到这一点?由于我保存了包括日期在内的文件名,因此,如果可能的话,最好使用此名称。任何帮助/代码(再次使用python或excel宏)都将不胜感激。
答案 0 :(得分:1)
我使用python的pandas
软件包的解决方案:
import os
import re
import pandas as pd
FILE_PATTERN = re.compile(r'(.*)_(\d{8})_result.csv')
def addDate(file_dir):
csv_list = [csvfile for csvfile in os.listdir(file_dir) if re.fullmatch(FILE_PATTERN, csvfile)]
for csvname in csv_list:
date = re.fullmatch(FILE_PATTERN, csvname).group(2)
df = pd.read_csv(os.path.join(file_dir, csvname))
df.insert(loc=1, column='date', value=[date]*len(df))
df.to_csv(os.path.join(file_dir, csvname), index=False)
示例输入:NYC_20180814_result.csv
中的some_path
:
A B C
0 0 1 2
1 3 4 5
2 6 7 8
执行addDate(some_path)
后,具有相同的csv:
A date B C
0 0 20180814 1 2
1 3 20180814 4 5
2 6 20180814 7 8
P.S。您不会在csv文件中看到索引列。