python - 如何在不打开 csv 文件的情况下添加新列
问题描述
我报废了数据并导出为 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 收集数据,则对应的文件名为 NYC_20180814_result.csv
在这里,我想在每个 csv 文件中添加一个新列,即日期变量。所需的示例将类似于下面的示例。具体来说,我想为每个 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 宏)将不胜感激。
解决方案
我使用pythonpandas
包的解决方案:
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
执行后相同的csv addDate(some_path)
:
A date B C
0 0 20180814 1 2
1 3 20180814 4 5
2 6 20180814 7 8
PS 您不会在 csv 文件中看到索引列。
推荐阅读
- modelica - 为什么“time==0.5”不是Modelica语言中的离散表达式?
- node.js - 将 HLS .m3u8 文件及其段文件 .ts 存储在 cassandra 数据库中是否很好?
- python - 创建函数 area_triangle_rectangle,它接受底数、高度和形状类型并计算其面积
- amazon-web-services - 使用 Ubuntu 18 配置服务器以从 Internet 访问它
- python-3.x - 是否可以在不调用函数本身的情况下将我们在函数中使用“return”返回的值分配给一个值?
- node.js - Azure Face API - 节点 JS 无法以二进制形式发送本地文件
- javascript - 如何找到任意 JavaScript 数组的元素之和
- c++ - Adobe After Effects SDK 中奇怪的 PF_Handle 声明
- list - 在 Flutter 中重新排列列表映射
- opencv - pycharm中opencv的输出图像在图像周围有白边