【问题标题】:Join dataframe columns in python在python中加入数据框列
【发布时间】:2021-01-01 05:14:22
【问题描述】:

我有一个名为 X 的数据框

X 有 3 列(Uni、Sub、Colors

Uni 是字符串,Sub 是字符串

但颜色是一个数组字符串

X 中的数据如下所示

Uni     Sub      Colours
-----   ------   -------
Melb    Math     (Red, Blue, Green)
Melb    English  (Yellow, Blue, Brown, White)
Sydney  Math     (Green, Pink, Red, White, Black)
Sydney  Art      (White, Pink)
Sydney  Med      (Yellow, Red, Pink, Brown, White, Black, Green)
Ottawa  Math     (Blue, Yellow)
Ottawa  Physics  (Red, Orange, Black)

我正在尝试将这些列连接到一个字符串中,以便将其传递给 SQL 存储过程

我想要的结果应该是这样的

Melb;Math;Red, Blue, Green|Melb;English;Yellow, Blue, Brown, White|Sydney;Math;Green, Pink, Red, White, Black| ...

其中的列用分号分隔;和由条分隔的行 |

我有这个代码

MyString = X[['Uni', 'Sub', 'Colours']].apply(lambda x: ';'.join(x), axis = 1)

但我遇到了这个错误

TypeError:序列项 2:预期的 str 实例,找到元组

所以我改成了这个

X["Codes"] = ",".join(map(str, X["Codes"]))
MyString = X[['PtsID', 'VisitID', 'Codes']].apply(lambda x: ';'.join(x), axis = 1)

但最终结果不是我想要的,因为它是一个 列表,它看起来像这样

Melb    Math     Red\n1    Blue\n2    Green\n3
Melb    English     Yellow\n1    Blue\n2    Brown\n3    White\n4
.
.
.

知道如何获得我想要的单个字符串格式吗?

【问题讨论】:

    标签: python arrays dataframe


    【解决方案1】:

    考虑df

    In [346]: df = pd.DataFrame({'Uni':['Melb', 'Melb', 'Sydney', 'Sydney'], 'Sub':['Math', 'English', 'Math', 'Art'], 'Colours':[('Red', 'Blue', 'Green'), ('Yellow', 'Blue', 'Brown', 'White'), ('Green', 'Pink', 'Red', 'White', 'Black'), ('White', 'Pink')]})
         ...: 
    
    In [347]: df
    Out[347]: 
          Uni      Sub                           Colours
    0    Melb     Math                (Red, Blue, Green)
    1    Melb  English      (Yellow, Blue, Brown, White)
    2  Sydney     Math  (Green, Pink, Red, White, Black)
    3  Sydney      Art                     (White, Pink)
    

    df.aggSeries.str.cat 一起使用:

    In [350]: df.Colours = df.Colours.apply(lambda x: ','.join(x))
    
    In [352]: ans = df.agg(';'.join, 1).str.cat(sep='|')
    
    In [353]: ans
    Out[353]: 'Melb;Math;Red,Blue,Green|Melb;English;Yellow,Blue,Brown,White|Sydney;Math;Green,Pink,Red,White,Black|Sydney;Art;White,Pink'
    

    【讨论】:

    • 嗨@asmgx。由于答案有帮助,请也给它投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2019-11-02
    • 2021-01-11
    • 2017-05-18
    • 2020-11-13
    • 2018-12-11
    相关资源
    最近更新 更多