pandas 合并数据遇到的坑

目标

原始表:

 number  Q1  Q2  Q3
0       1  B0  C0  D0
1       1  B1  C1  D1
2       1  B2  C2  D2
3       1  B3  C3  D3

变为:


number  Q1  Q2  Q3
0       1  B0  C0  D0
1       1  B1  C1  D1
2       1  B2  C2  D2
3       1  B3  C3  D3
0       2  B0  C0  D0
1       2  B1  C1  D1
2       2  B2  C2  D2
3       2  B3  C3  D3
0       3  B0  C0  D0
1       3  B1  C1  D1
2       3  B2  C2  D2
3       3  B3  C3  D3
>>> x=pd.DataFrame({'number': [1,1,1,1],
                 'Q1': ['B0', 'B1', 'B2', 'B3'],
                 'Q2': ['C0', 'C1', 'C2', 'C3'],
                 'Q3': ['D0', 'D1', 'D2', 'D3']},)
>>> x
   number  Q1  Q2  Q3
0       1  B0  C0  D0
1       1  B1  C1  D1
2       1  B2  C2  D2
3       1  B3  C3  D3
>>> number_lt=[1,2,3]
>>> lt = []
>>> for j in number_lt:
    	x['number'] = j
    	lt.append(x)
    
>>> lt
[   number  Q1  Q2  Q3
0       3  B0  C0  D0
1       3  B1  C1  D1
2       3  B2  C2  D2
3       3  B3  C3  D3,    number  Q1  Q2  Q3
0       3  B0  C0  D0
1       3  B1  C1  D1
2       3  B2  C2  D2
3       3  B3  C3  D3,    number  Q1  Q2  Q3
0       3  B0  C0  D0
1       3  B1  C1  D1
2       3  B2  C2  D2
3       3  B3  C3  D3]

单独打印x,是可以得到想要的结果的,但是保存在列表中时,却出现先前保存的值被覆盖的情况。

>>> for j in number_lt:
	    x['number'] = j
    	print(x)
    
   number  Q1  Q2  Q3
0       1  B0  C0  D0
1       1  B1  C1  D1
2       1  B2  C2  D2
3       1  B3  C3  D3
   number  Q1  Q2  Q3
0       2  B0  C0  D0
1       2  B1  C1  D1
2       2  B2  C2  D2
3       2  B3  C3  D3
   number  Q1  Q2  Q3
0       3  B0  C0  D0
1       3  B1  C1  D1
2       3  B2  C2  D2
3       3  B3  C3  D3

解决方法: 把x改为x.copy()

>>> number_lt=[1,2,3]
>>> lt = []
>>> for j in number_lt:
    	x['number'] = j
    	lt.append(x.copy())
    
>>> lt
[   number  Q1  Q2  Q3
0       1  B0  C0  D0
1       1  B1  C1  D1
2       1  B2  C2  D2
3       1  B3  C3  D3,    number  Q1  Q2  Q3
0       2  B0  C0  D0
1       2  B1  C1  D1
2       2  B2  C2  D2
3       2  B3  C3  D3,    number  Q1  Q2  Q3
0       3  B0  C0  D0
1       3  B1  C1  D1
2       3  B2  C2  D2
3       3  B3  C3  D3]

最后用concat连接起来

>>> pd.concat(lt)
   number  Q1  Q2  Q3
0       1  B0  C0  D0
1       1  B1  C1  D1
2       1  B2  C2  D2
3       1  B3  C3  D3
0       2  B0  C0  D0
1       2  B1  C1  D1
2       2  B2  C2  D2
3       2  B3  C3  D3
0       3  B0  C0  D0
1       3  B1  C1  D1
2       3  B2  C2  D2
3       3  B3  C3  D3
当使用pandas合并多个Excel文件的数据时,可能会遇到列不对齐的问题。这通常是因为不同文件中相同名称的列实际上包含了不同内容,或者是因为某些文件中缺少某些列。在合并时,pandas会尝试根据列名将数据对齐,如果列名相同但是内容不匹配,就会出现问题。 为了正确合并文件并确保列对齐,可以采取以下几个步骤: 1. 首先检查所有待合并的Excel文件,确定哪些列是需要合并的,并且这些列在不同文件中确实表示相同的内容。 2. 使用pandas读取Excel文件时,可以先创建一个统一的列名列表,然后在读取每个文件时只读取这些指定的列。对于不在列名列表中的列,可以忽略不读。 3. 在合并数据时,可以使用`pd.concat()`函数或者`DataFrame.join()`方法,通过`axis=1`参数来横向合并数据。如果存在某些文件缺少的列,则需要在合并前使用`reindex`方法填充缺失的列,通常使用`NaN`来填充缺失值。 示例代码片段如下: ```python import pandas as pd # 指定所有文件都需要的列名列表 common_columns = ['column1', 'column2', 'column3'] # 读取并合并所有文件 dfs = [] for file in file_list: df = pd.read_excel(file, usecols=common_columns) dfs.append(df) # 合并所有DataFrame combined_df = pd.concat(dfs, ignore_index=True) # 如果需要,使用reindex确保所有DataFrame具有相同的列 combined_df = combined_df.reindex(columns=common_columns) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值