首页 > 解决方案 > 如何从每个csv的列值中删除逗号然后合并?

问题描述

我有多个要在某些列上合并的 CSV。但在此之前,我需要确保列值没有任何逗号。所以逗号应该用空格(" ")代替。

所以我有一个包含 CSV 的文件夹。我能够加载它们并将它们合并到列town和. 所以这就是我所做的citystate

os.chdir('/Users/cho/Downloads/census/')
dfs = [pd.read_csv(f) for f in os.listdir(os.getcwd()) if f.endswith('csv') 
df = reduce(lambda left,right: pd.merge(left,right,on=['town', 'city', 'state']), dfs)
df.to_csv('multicsv.csv', sep=',', encoding='utf-8', index=False)

但我也想包括将逗号替换为每列值的空格的附加操作。我知道我可以通过做类似的事情来单独做

# I get the list of columns for each dataframe
cols = ['col1', 'col2', ..., 'colN']

# pass them to df.replace(), specifying each char and it's replacement:
df[cols] = df[cols].replace({'\$': '', ',': ''}, regex=True)

但是我如何将此步骤作为合并操作的一部分?

标签: pythonpandasmerge

解决方案


我认为更好的是替换列表理解中的值以创建 DataFrames 列表dfs

os.chdir('/Users/cho/Downloads/census/')

cols = ['col1', 'col2', ..., 'colN']
dfs = [pd.read_csv(f).replace({'\$': '', ',': ''}, regex=True) 
          for f in os.listdir(os.getcwd()) if f.endswith('csv')]

df = reduce(lambda left,right: pd.merge(left,right,on=['town', 'city', 'state']), dfs)
df.to_csv('multicsv.csv', sep=',', encoding='utf-8', index=False)

推荐阅读