【问题标题】:Splitting a column in dataframe using str.split function使用 str.split 函数拆分数据框中的列
【发布时间】:2019-08-12 14:29:09
【问题描述】:

我正在尝试将具有逗号分隔值的列拆分为 2 列,但 str.split 函数返回具有 0 和 1 的列,而不是拆分字符串值

我有一个包含“全名”列的数据框,该列的全名用逗号分隔姓氏和名字。

我使用了 str.split 函数,该函数在我执行时仅用于显示。但是:当我尝试使用相同的函数将 2 个新列添加到具有拆分数据的同一数据帧中时,我得到 2 个新列,第一个填充为 0,第二个填充为 1。

用于显示拆分数据的代码:

df2015_2019.iloc[:,0].str.split(',', expand=True)

无法使用拆分数据创建新列的代码:

df2015_2019['Lname'],df2015_2019['Fname'] = df2015_2019.iloc[:,0].str.split(',', expand=True)

我得到一个全为 0 的列“Lname”和一个全为 1 的列“Fname”

【问题讨论】:

标签: python python-3.x pandas jupyter


【解决方案1】:

实现此目的的另一种方法如下..

示例数据集:

>>> df = pd.DataFrame({'Name': ['Karn,Kumar', 'John,Jimlory']})
>>> df
           Name
0    Karn,Kumar
1  John,Jimlory

结果:

您可以在拆分值时分配列名,如下所示。

>>> df[['First Name','Last Name']] = df['Name'].str.split(",", expand=True)
>>> df
           Name First Name Last Name
0    Karn,Kumar       Karn     Kumar
1  John,Jimlory       John   Jimlory

或者,正如另一个答案所述..

>>> df['Name'].str.split(",", expand=True).rename({0: 'First_Name', 1: 'Second_Name'}, axis=1)
  First_Name Second_Name
0       Karn       Kumar
1       John     Jimlory

>>> df['Name'].str.rsplit(",", expand=True).rename(columns={0:'Fist_Name', 1:'Last_Name'})
  Fist_Name Last_Name
0      Karn     Kumar
1      John   Jimlory

注意:你可以使用axis = columnsaxis =1 两者都是一样的。

使用 Series.str.partition 的另一种方式几乎没有争吵,但是,我们必须使用drop,因为partition 保留了逗号“,”以及一列。

>>> df['Name'].str.partition(",", True).rename(columns={0:'Fist_Name', 2:'Last_Name'}).drop(columns =[1])
  Fist_Name Last_Name
0      Karn     Kumar
1      John   Jimlory

只要让它变得苗条,我们就可以为rename 定义字典值。

1 - 使用str.partition ..

dict = {0: 'First_Name', 2: 'Second_Name'}

df = df['Name'].str.partition(",", True).rename(dict2,axis=1).drop(columns =[1])
print(df)

  First_Name Second_Name
0       Karn       Kumar
1       John     Jimlory

2 - 使用str.split() ..

dict = {0: 'First_Name', 1: 'Second_Name'}

df = df['Name'].str.split(",", expand=True).rename(dict, axis=1)
 print(df)
  First_Name Second_Name
0       Karn       Kumar
1       John     Jimlory

【讨论】:

    【解决方案2】:

    拆分后的列可以重命名:

    df = pd.DataFrame({'a': ['a,b', 'c,d']})
    df['a'].str.split(',', expand=True).rename({0: 'Lname', 1: 'Fname'}, axis='columns')
    

    打印出来:

      Lname Fname
    0     a     b
    1     c     d
    

    【讨论】:

      【解决方案3】:

      pandas.Series.str 访问器可以分配给列。

      1. split 首先(可选地,使用n=1)保持完全一个分裂。
      2. 使用另一个str

      df['Lname'], df['Fname'] = df['Name'].str.split(',').str
      

      【讨论】:

      • 很好,我不知道你可以做到这一点。 +1
      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      相关资源
      最近更新 更多