简体   繁体   中英

Copy values only to a new empty dataframe with column names - Pandas

I have two dataframes.

df1= pd.DataFrame({'person_id':[1,2,3],'gender': ['Male','Female','Not disclosed'],'ethnicity': ['Chinese','Indian','European']})
df2 = pd.DataFrame(columns=['pid','gen','ethn'])

As you can see, the second dataframe ( df2 ) is empty. But may also contain few rows of data at times

What I would like to do is copy dataframe values (only) from df1 to df2 with column names of df2 remain unchanged.

I tried the below but both didn't work

df2 = df1.copy(deep=False)
df2 = df1.copy(deep=True)

How can I achieve my output to be like this? Note that I don't want the column names of df1. I only want the data

在此处输入图片说明

Do:

df1.columns = df2.columns.tolist()
df2 = df2.append(df1)

## OR 

df2 = pd.concat([df1, df2])

Output:

  pid            gen      ethn
0   1           Male   Chinese
1   2         Female    Indian
2   3  Not disclosed  European


Edit based on OPs comment linking to the nature of dataframes:

frame = [df1, df2, df3]

for i in range(len(frame)):
    frame[i].columns = final_df.columns.tolist()
    final_df = final_df.append(frame[i])

print(final_df)

Now do:

  pid            gen      ethn
0   1           Male   Chinese
1   2         Female    Indian
2   3  Not disclosed  European
0   4           Male   Chinese
1   5         Female    Indian
2   6  Not disclosed  European
0   7           Male   Chinese
1   8         Female    Indian
2   9  Not disclosed  European

Output:

  pid gen ethn 0 1 Male Chinese 1 2 Female Indian 2 3 Not disclosed European 0 4 Male Chinese 1 5 Female Indian 2 6 Not disclosed European 0 7 Male Chinese 1 8 Female Indian 2 9 Not disclosed European 

我认为最干净的解决方案是在正确设置了列名称之后追加df1:

df2 = df2.append(pd.DataFrame(df1.values, columns=df2.columns))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM