大熊猫:如何将行合并为单行

时间:2020-05-22 19:03:23

标签: python pandas dataframe

我有一个csv文件,其中包含多行名称和数字,如图所示。enter image description here

我想将具有名称的行合并到标题中,并将具有数字的行合并到row0中。我的意思是我想要世田谷,next谷...在大田旁边作为标题,并在row0处提供数字。 这是我尝试过的,但仍然无法正常工作。 预先谢谢你。

df1 = df.iloc[0:1]

df2 = df.iloc[1:3]

df = pd.concat([df1, df2], axis=1) enter image description here

3 个答案:

答案 0 :(得分:0)

问题是df2的索引与df1的索引不匹配。 因此,concat根据索引将df2行添加为第三行。
在concat解决您的问题之前,请重置df2的索引。

df1 = df.iloc[0:1]

for i in range(1,(len(df.index)),2):
    df2 = df.iloc[i:i+2]
    df2 = df2.reset_index(drop=True)
    df2.columns = list(df2.iloc[0,:])
    df2 = df2.drop(0,axis=0)
    df2 = df2.reset_index(drop=True)
    df1 = pd.concat([df1, df2], axis=1)

df1

答案 1 :(得分:0)

您是否正在寻找类似的东西?

import pandas as pd
df = pd.DataFrame([[1,2,3],['d','e','f'],[4,5,6],['g','h','i'],[7,8,9]],columns=['a','b','c'])

df = df.T
_df = df[0]
for i in df.columns:
  if i%2 == 1:
    df2 = df[i+1]
    df2.index = df[i].values
    _df = pd.concat([_df, df2])
_df = _df.reset_index()
df1 = _df.T
df1.columns = _df['index']
df1 = df1[df1.index==0]
df1

还使用df.T,因为它只是循环df.columns并拾取奇数行(从您的数据看来!)

输出:

enter image description here

答案 2 :(得分:0)

如果我正确理解了您的问题,则希望数据框仅包含一行(包含所有数字),并且字母/单词将用作数值的相应列名称。

df=pd.read_csv('your_file.csv')

new_df=pd.DataFrame([df.iloc[0].to_list()],columns=df.columns)
for x in range(int((df.shape[0]-1)/2)):
    sample_df=pd.DataFrame([df.iloc[2*(x+1)].to_list()],columns=df.iloc[2*x+1].to_list())
    new_df=pd.concat([new_df,sample_df ],axis=1)

这应该有效。基本上,我是在循环中创建一个新的数据框并将其压缩为先前的数据框。让我知道您是否遇到任何困难。