java - 以特定方式合并大型 csv 文件
问题描述
我已经看到了很多关于这个的其他问题,但我的情况有点不同。
我正在尝试制作/找到一个可以通过以下方式合并 csv 文件的程序。
file1.csv
colHeadders 1col1head 1col2head 1col3head ...
row1head 1data[1][1] 1data[1][2] 1data[1][3] ...
row2head 1data[2][1] 1data[2][2] 1data[2][3] ...
headNotShared 1data[3][1] 1data[3][2] 1data[3][3] ...
row4head 1data[4][1] 1data[4][2] 1data[4][3] ...
...
file2.csv
colHeadders 2col1head 2col2head 2col3head ...
row1head 2data[1][1] 2data[1][2] 2data[1][3] ...
row2head 2data[2][1] 2data[2][2] 2data[2][3] ...
row4head 2data[3][1] 2data[3][2] 2data[3][3] ...
headNotShared 2data[4][1] 2data[4][2] 2data[4][3] ...
...
merged.csv
colHeaders 1col1head 1col2head 1col3head ... 2col1head 2col2head 2col3head ...
row1head 1data[1][1] 1data[1][2] 1data[1][3] ... 2data[1][1] 2data[1][2] 2data[1][3]
row2head 1data[2][1] 1data[2][2] 1data[2][3] ... 2data[2][1] 2data[2][2] 3data[3][2]
row4head 1data[4][1] 1data[4][2] 1data[4][3] ... 2data[3][1] 2data[3][2] 2data[3][3] ...
...
另外棘手的部分是文件可能不会共享所有标题,在这种情况下,我希望合并的 csv 仅包含具有共享标题的行。如果有帮助,我正在使用的确切文件是大型甲基化 prfile,我正在尝试预处理数据。文件的实际外观如下:
------ 03--34 08--45 08--59 ...
cg000000957 0.8950 0.8876 0.8953 ...
cg000001349 0.7687 0.7687 0.7700 ...
...
------ 03--34 08--45 08--59 ...
cg000000957 0.8951 0.8877 0.8954 ...
cg000001101 0.6013 0.6100 0.6022 ...
...
可能有帮助的是知道行标题是按升序排列的。这些是大型文件,超过演出,因此速度至关重要。语言并不重要,我尝试编写一个 bash 脚本来执行此操作,但无济于事。csv 文件为 txt 格式,由 \space 选项卡分隔。
解决方案
另一种方法(尽管 Python 3.x):
# Read both file into pandas dataframe
df1 = pd.read_csv("file1.csv", sep="\t").set_index("colHeadders")
df2 = pd.read_csv("file2.csv", sep="\t").set_index("colHeadders")
# Join them with an inner join (only index contained in both dataframes are kept)
new_df = df1.join(df2, how="inner", lsuffix="_df1", rsuffix="_df2")
输出:
1col1head_df1 1col2head_df1 1col3head_df1 2col1head_df2 ...
colHeadders
row1head 1data[1][1] 1data[1][2] 1data[1][3] 2data[1][1] ...
row2head 1data[2][1] 1data[2][2] 1data[2][3] 2data[2][1] ...
row4head 1data[4][1] 1data[4][2] 1data[4][3] 2data[3][1] ...
推荐阅读
- typescript - 如何在打字稿中使用 sigleton() 在构造函数中传递值?
- c++ - 给定值之前触发的函数
- postgresql - 在 knex 查询中使用 postgres 函数“arr agg”时出错
- java - 有没有办法在一个安卓设备上同时使用两个外部音量键来获得第三个独特的输出?
- c++ - 如何为非字符串的自定义选项值类型处理 Boost::program_options 配置文件中的空格?
- javascript - React 没有重新渲染
- javascript - 数据表不想从 API 中提取数据
- arduino-uno - 使用数组时arduino冻结
- c# - 如何设置redirect_uri登录google .Net Core 2,Docker
- f# - 对象同步异常仅在使用断点时,在 F#