如何在python中合并多个CSV而不使用coulmn名称作为头?
我有7个CSV,我想根据id合并它们,下面是示例: CSV1: CSV2: CSV3: 我需要的合并CSV:如何在python中合并多个CSV而不使用coulmn名称作为头?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有7个CSV,我想根据id合并它们,下面是示例: CSV1: CSV2: CSV3: 我需要的合并CSV: 101, A, B, C, D, E, F, J, K, L 102, A, B, C, D, E, F, J, K, L CSV没有列名或标题 我试着使用pandas merge和concat,但这似乎不起作用,因为它会使字段成倍增加。请帮助。让我们假设所有文件都在目录中 import pathlib, pandas as pd path = pathlib.Path("
101, A, B, C, D, E, F, J, K, L
102, A, B, C, D, E, F, J, K, L
CSV没有列名或标题
我试着使用pandas merge和concat,但这似乎不起作用,因为它会使字段成倍增加。请帮助。让我们假设所有文件都在目录中
import pathlib, pandas as pd
path = pathlib.Path("path to directory")
conslidated_df = pd.concat([pd.read_csv(file_,header=None).set_index(0) for file_ in path.iterdir()],axis=1)
下面是我们如何一步一步地做到这一点 假设:所有csv文件都在一个文件夹中 第一步。获取所有csv文件的路径
将熊猫作为pd导入
导入操作系统
csv_folder='csvs/'
df_list=list(过滤器(lambda x:x.lower().endswith('.csv')、os.listdir(csv_文件夹)))
示例输出如下所示:
['1.csv', '2.csv', '3.csv']
步骤2:读取所有csv并连接它们
combined_df=pd.DataFrame()
对于df_列表中的df_名称:
df=pd.read\u csv(os.path.join(csv\u文件夹,df\u名称),header=None,index\u col=0)
组合式测向=pd.concat([组合式测向,测向],轴=1)
最终df看起来像
在pd.concat()中使用'axis=1'参数来创建宽表:
pd.concat([df1,df2,df3],axis=1)
感谢您的详细响应,但是当我实现这个:raise ValueError(f“传递值的形状是{传递},索引暗示{隐含}”)ValueError:传递值的形状是(52205,6),索引暗示(52175,6)我想这是因为指数问题。如果存在重复索引,则可能发生此错误。你能在循环中添加一个print(df_name)
,并共享创建错误的CSV。读取第二个文件时抛出错误,pfb我拥有和需要的数据:-file1-101,Y,1999-07-01 00:00:00.0,file2-101,00000004,2004-01-01 00:00:00.0,final_文件-101,Y,1999-07-01 00:00.0,00000004,2004-01-01 00:00:00.0,当我尝试运行它并给出与final_文件相同的结果时,它不会抛出任何错误。您可以使用pd.read_csv('filepath')
分别读取文件1和文件2,并确保csv格式没有错误吗?虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您文章的质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。
101, A, B, C, D, E, F, J, K, L
102, A, B, C, D, E, F, J, K, L
import pathlib, pandas as pd
path = pathlib.Path("path to directory")
conslidated_df = pd.concat([pd.read_csv(file_,header=None).set_index(0) for file_ in path.iterdir()],axis=1)
for idx, df in enumerate(dataframes):
if idx == 0:
merged_df = dataframe[1] #df2
merge_total = pd.merge(df, merged_df, how="inner", on="id")
['1.csv', '2.csv', '3.csv']
1 2 3 4 1 2 1 2 3
0
101 A B C D E F J K L
102 A B C D E F J K L