组合具有不同结构的 CSV 文件的最佳工具?
Best tool to combine CSV files with different structure?
我有多个大型 CSV 文件。这些 CSV 文件几乎没有列差异。为了将它们提供给 AWS QuickSight 进行数据可视化,我想统一这些 CSV 文件的结构。我认为这样做我有两种方法:
- 将缺失的列添加到每个 CSV 文件中,使它们看起来都一样
- 将所有 CSV 文件合并为一个大文件
执行此操作的最佳工具是什么?
有没有工具可以显示两个CSV文件的结构差异?如果我发现缺少哪些列,我也可以手动添加它们。
使用 pandas 我可以合并 CSV 文件,但以我所知,我应该命名所有列(下面的代码),这没有用。
import pandas as pd
df1 = pd.DataFrame({'column1': [1,2],
'column2': [3,4],
})
df2 = pd.DataFrame({'column1': [5,6],
'column3': [7,8],
})
pd.concat([df1,df2],ignore_index=True)
结果:
column1 column2 column3
0 1 3.0 NaN
1 2 4.0 NaN
2 5 NaN 7.0
3 6 NaN 8.0
我无法告诉你“最好的” 工具是什么;这是主观的,有很多依赖性。
我可以告诉你 miller should probably be on your short list for tools to consider for working with CSV data. Also see the miller
GitHub site. 最后一件事:作者是 super-helpful。
据我所知,以下内容可以完成这项工作:
mlr --csv reshape -r "^A" -o item,value then reshape -s item,value \ then unsparsify --fill-with "" *.csv > result.csv
关于命令的一些注意事项:
- reshape -r "^A" -o item,value,将输入 CSV 从宽转换为长,将其应用于名称以“A”开头的所有字段;
- reshape -s item,value,将之前的输出从长变宽;
- unsparsify --fill-with "",管理所有输入记录的字段名称。对于在给定记录中不存在但在其他记录中存在的字段名称,填写值“.
我有多个大型 CSV 文件。这些 CSV 文件几乎没有列差异。为了将它们提供给 AWS QuickSight 进行数据可视化,我想统一这些 CSV 文件的结构。我认为这样做我有两种方法:
- 将缺失的列添加到每个 CSV 文件中,使它们看起来都一样
- 将所有 CSV 文件合并为一个大文件
执行此操作的最佳工具是什么?
有没有工具可以显示两个CSV文件的结构差异?如果我发现缺少哪些列,我也可以手动添加它们。
使用 pandas 我可以合并 CSV 文件,但以我所知,我应该命名所有列(下面的代码),这没有用。
import pandas as pd
df1 = pd.DataFrame({'column1': [1,2],
'column2': [3,4],
})
df2 = pd.DataFrame({'column1': [5,6],
'column3': [7,8],
})
pd.concat([df1,df2],ignore_index=True)
结果:
column1 column2 column3
0 1 3.0 NaN
1 2 4.0 NaN
2 5 NaN 7.0
3 6 NaN 8.0
我无法告诉你“最好的” 工具是什么;这是主观的,有很多依赖性。
我可以告诉你 miller should probably be on your short list for tools to consider for working with CSV data. Also see the miller
GitHub site. 最后一件事:作者是 super-helpful。
据我所知,以下内容可以完成这项工作:
mlr --csv reshape -r "^A" -o item,value then reshape -s item,value \ then unsparsify --fill-with "" *.csv > result.csv
关于命令的一些注意事项:
- reshape -r "^A" -o item,value,将输入 CSV 从宽转换为长,将其应用于名称以“A”开头的所有字段;
- reshape -s item,value,将之前的输出从长变宽;
- unsparsify --fill-with "",管理所有输入记录的字段名称。对于在给定记录中不存在但在其他记录中存在的字段名称,填写值“.