如何将所有行连接到多列DataFrame的一行中?

时间:2018-12-05 11:26:34

标签: pandas

在Python中,

  1. 如何最好地将多列DataFrame中每列的所有行合并为一列,
  2. 以‘|分隔’分隔符
  3. 包括空值

    import pandas as pd html = 'https://en.wikipedia.org/wiki/Visa_requirements_for_Norwegian_citizens' df = pd.read_html(html, header=0) df= df[1] df.to_csv('norway.csv)

From This: To This:

2 个答案:

答案 0 :(得分:1)

我认为您需要在fillna处替换缺失的值,并用astypejoin将值转换为字符串。获取Series,因此对于DataFrame的一列,添加apply并进行转置:

df = df.fillna(' ').astype(str).apply('|'.join).to_frame().T
print (df)
                      Country Allowed_stay        Visa_requirement
0  Albania|Afganistan|Andorra     30|30|60  visa free| | visa free

或将列表推导与DataFrame构造函数一起使用:

L = ['|'.join(df[x].fillna(' ').astype(str)) for x in df]
df1 = pd.DataFrame([L], columns=df.columns)
print (df1)
                      Country Allowed_stay        Visa_requirement
0  Albania|Afganistan|Andorra     30|30|60  visa free| | visa free

答案 1 :(得分:1)

df = pandas.DataFrame([
    {'A' : 'x', 'B' : 2, 'C' : None},
    {'A' : None, 'B' : 2, 'C' : 1},
    {'A' : 'y', 'B' : None, 'C' : None},
])

pandas.DataFrame(df.fillna('').apply(lambda x: '|'.join(x.astype(str)), axis = 0)).transpose()