gpt4 book ai didi

python - 我如何使用 pandas 将 n 个 .csv 文件(可能是 20-30 个文件)与 1 个 BIG .csv 文件水平(轴 = 1)合并?

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:23 24 4
gpt4 key购买 nike

我有一个 20-30 个 csv 文件,其中包含 3 列,如“id”、“col1”、“col2”、“col3”和 1 个 20GB 大小的大 csv 文件,我想分块读取并与这些 samller 合并.csv 文件。较大的 csv 文件包含“id”、“name”、“zipdeails”等列。两者都有相同序列的 ID 列,smaple 看起来像

 'id','name','zipdeails'
1,Ravi,2031345
2,Shayam,201344
3,Priya,20134
.........
1000,Pravn,204324

block 文件 1 看起来像

 'id','col1','col2','col3'
1,Heat,,
2,Goa,Next,
3,,,Delhi

所有较小的 csv 文件都具有相同的长度(行数),除了最后一个文件的长度可能更小,每个文件中都有标题。这些要合并到的较大的 csv 文件可以分成与这些较小文件的长度相等的 block 大小所以最后一 block 看起来像

'id','col1','col2','col3'
1000,Jaipur,Week,Trip

现在输出应该是这样的

'id','name','zipdeails','col1','col2','col3'
1,Ravi,2031345,Heat,NAN,NAN
2,Shayam,201344,Goa,Next,NAN
3,Priya,20134,NAN,NAN,Delhi
.........
1000,Pravn,204324,Jaipur,Week,Trip

最佳答案

我认为你需要创建 list of DataFrame s 用于所有小文件,然后将大文件读入内存和 concat 所有一起index创建者 id专栏:

import glob

#concat 30 files
files = glob.glob('files/*.csv')
dfs = [pd.read_csv(fp, index_col=['id']) for fp in files]

#if necessary
#df_big = df_big.set_index('id')
df_fin = pd.concat([df_big, dfs], axis=1)

如果 id 的顺序相同,可以稍微修改一下解决方案所有 DataFrame 中的值都没有重复项,例如 1,2,3...N带参数 nrows用于只读大 DataFrame 的第一行按较小数据帧的最大长度:

#concat 30 files
files = glob.glob('files/*.csv')
dfs = [pd.read_csv(fp, index_col=['a']) for fp in files]

len_max= max([x.index.max() for x in dfs])

df_big= pd.read_csv('big_df_file.csv', index_col=['id'], nrows=len_max)

df_fin = pd.concat([df_big, dfs], axis=1)

编辑:

#concat 30 files
files = glob.glob('files/*.csv')
#order of files is important for concat values -
#in first file are id = (1,100), second (101, 200)...
print (files)

#set by max rows of file
N = 100
#loop by big fileby chunk define in N
for i, x in enumerate(pd.read_csv('files/big.csv', chunksize=N, index_col=['id'])):
#added try for avoid errors if want seelct non exist file in list files
try:
df = pd.read_csv(files[i], index_col=['id'])
df1 = pd.concat([x, df], axis=1)
print (df1)
#in first loop create header in output
if i == 0:
pd.DataFrame(columns=df1.columns).to_csv('files/out.csv')
#append data to output file
df1.to_csv('files/out.csv', mode='a', header=False)

except IndexError as e:
print ('no files in list')

关于python - 我如何使用 pandas 将 n 个 .csv 文件(可能是 20-30 个文件)与 1 个 BIG .csv 文件水平(轴 = 1)合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47669609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com