python - 附加具有不同列名称的数据框 - Pandas

标签 python python-3.x pandas python-2.7 dataframe

我有 3 个数据帧,可以通过下面所示的代码生成

df1= pd.DataFrame({'person_id':[1,2,3],'gender': ['Male','Female','Not disclosed'],'ethn': ['Chinese','Indian','European']})
df2= pd.DataFrame({'pers_id':[4,5,6],'gen': ['Male','Female','Not disclosed'],'ethnicity': ['Chinese','Indian','European']})
df3= pd.DataFrame({'son_id':[7,8,9],'sex': ['Male','Female','Not disclosed'],'ethnici': ['Chinese','Indian','European']})

我想做两件事

a) 将所有这 3 个数据帧附加到一个大型结果数据帧

当我使用下面的代码尝试执行此操作时,输出不符合预期

df1.append(df2)

enter image description here

因此,为了解决这个问题,我知道我们必须重命名导致下面目标 b 的列名称

b) 以优雅的方式重命名这n个数据框的列,使其保持一致

请注意,实时情况下,我可能会拥有具有不同列名称的数据框,我可能事先不知道这些名称,但其中的值将始终相同,属于EthnicityGender列Person_id。但请注意,还可以有其他几个列,例如年龄日期bp读数

目前,我通过使用以下代码手动读取列名称来实现此目的

df2.columns
df2.rename(columns={ethnicity:'ethn',gender = 'gen',person_id='pers_id}, 
             inplace=True)

如何将所有数据框的列名称设置为相同(genderethnicityperson_id 等),而不管它们的值如何原始列值

最佳答案

根据 pandas documentation ,您可以创建映射来执行此操作:

df2.rename(columns={column1:'ethn', column2:'gen', column3:'pers_id'}, inplace=True)

现在,您明确表示您必须执行此运行时操作。如果您知道列数及其各自的位置不会改变,则可以使用 df2.columns() 收集实际的列名称,这应该输出类似的内容:

['ethnicity', 'gender', 'person_id']

此时,您可以将映射创建为:

final_columns = ['ethn', 'gen', 'pers_id']
previous_columns = df2.columns()
mapping = {previous_columns[i]: final_columns[i] for i in range(3)}  # 3 is arbitrary.

然后就打电话

df2.rename(mapping, inplace=True)

关于python - 附加具有不同列名称的数据框 - Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57250943/

相关文章:

python - 类型错误 : fit_transform() missing 1 required positional argument: 'X'

python - pandas - 获取每个多索引级别标签行的一小部分

python - Matplotlib 上的共享分类 Y 轴

python - 如何在 Python 3 中创建包?模块未找到错误

python-3.x - 输入验证及其改进方法

python - sns.regplot 显示了一个没有意义的回归阴影区域

python - 如何避免 pandas 在保存的 csv 中创建索引

python - Peewee 和更新

python - 基于最频繁值的子集

python - SQLAlchemy:为什么附加到这种多对一关系会失败?