【发布时间】:2021-10-01 04:46:27
【问题描述】:
我有大约 1000 多个 CSV 需要水平合并。这是我的代码:
import os
import glob
import pandas as pd
dirname = r'path'
os.listdir(dirname)
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
dflist = []
for file in all_filenames:
df = pd.read_csv(dirname+file, header=None, sep='\n')
print(df)
df = df[0].str.split(',', expand=True)
dflist.append(df)
result = pd.concat(dflist, axis=1)
file_name = r'newfilenamepath'
result.to_csv(file_name)
问题是数据包括“Bob's Company, Ltd”之类的项目,这些项目最终会分成两列:“Bob's Company”和“Ltd”,因为我是根据逗号进行拆分的。用逗号以外的任何东西分割会导致一些非常时髦的格式。所涉及的 CSV 没有相同的标题、列数或行数。我只是想把它们放在一起。
如果相关,我设法编写代码将它们垂直合并,我可能需要进行简单的编辑才能将它们水平合并:
Dir = r'path'
files = os.listdir(Dir)
file_name = 'mergedcsvfilename'
with open(file_name + '.csv','w') as wf:
for file in files:
if '.DS_Store' not in file:
with open(Dir + file) as rf:
for line in rf:
if line.strip(): # if line is not empty
if not line.endswith("\n"):
line+="\n"
wf.write(line)
【问题讨论】:
-
如果逗号用作数据字段分隔符并且出现在数据字段中,我看不到判断逗号是否为分隔符的方法。字符串值是否包含在引号中?你能举一个你的输入数据的例子吗?
-
对
pd.read_csv使用quotechar='"'选项? -
请从您的 CSV 文件中以文本格式添加几行到您的问题中。如果逗号在引号内,通常会自动忽略它们。
-
您是否需要匹配文件中的行,或者您是否正在寻找一个简单的水平合并,即 line1 与 line1、2 与 2 等等...