【问题标题】:Pandas DataFrame Add a Column Based on a StringPandas DataFrame 添加基于字符串的列
【发布时间】:2017-10-29 03:33:05
【问题描述】:

我在熊猫数据框中有以下列:

在“统计信息”列中,每个统计信息用空格分隔。我想为每个统计数据创建新列。问题是并非每一行都有每种类型的统计信息。例如。第 2 行中没有“trey”。我该如何完成这项壮举?

我试过了,但它只是在每个''之后添加了新列:

nba_2017_revised4 = nba_2017_revised3.join(nba_2017_revised3['Stats'].str.split(' ', 7, expand=True).rename(columns={0:'Points', 1:'Rebounds', 2:'Assists', 3:'Steals', 4:'Turnovers', 5:'3_Pointers', 6:'FG_Attempts', 7:'FT_Attempts'}))

Date First Last Stats Minutes DKP Team Opp DRPM 0 20170412.0 Ron Baker 8pt 1rb 4as 2to 1trey 3-6fg 1-2ft 29.350000 14.75 nyk phi -0.56 1 20170409.0 Ron Baker 11pt 8rb 8as 1st 2to 1trey 5-12fg 38.100000 34.50 nyk tor -0.56 2 20170407.0 Ron Baker 2pt 2rb 7as 1to 1-7fg 30.500000 14.50 nyk mem -0.56 3 20170406.0 Ron Baker 12pt 2rb 2as 2to 5-9fg 2-2ft 27.166667 16.50 nyk 为 -0.56 4 20170404.0 Ron Baker 9pt 4rb 6as 2st 4to 1trey 4-7fg 0-1ft 37.300000 25.50 nyk chi -0.56

谢谢。

【问题讨论】:

  • 无图片请以文字形式添加数据。我们如何复制数据来尝试我们的解决方案。
  • 预期输出是什么
  • nba_2017_revised4 = nba_2017_revised3.join(nba_2017_revised3['Stats'].str.split(' ', 7, expand=True).rename(columns={0:'Points', 1:'篮板',2:'助攻',3:'抢断',4:'失误',5:'3_Pointers',6:'FG_Attempts',7:'FT_Attempts'}))
  • 请在问题中添加预期的输出。所以我们更了解您的需求。

标签: python string pandas dataframe multiple-columns


【解决方案1】:

我会使用正则表达式来解析每个拆分,将末尾的连续字母作为列值,将前面的字符串作为值。

import pandas as pd
import re

pat = lambda x: re.match('^(.+?)([a-z]+)$', x).groups()
prs = lambda s: pd.Series(*zip(*[pat(x) for x in s.split()]))

df.drop('Stats', 1).join(df.Stats.apply(prs))

       Date First   Last    Minutes    DKP Team  Opp  DRPM as    fg   ft  pt rb   st to trey
0  20170412   Ron  Baker  29.350000  14.75  nyk  phi -0.56  4   3-6  1-2   8  1  NaN  2    1
1  20170409   Ron  Baker  38.100000  34.50  nyk  tor -0.56  8  5-12  NaN  11  8    1  2    1
2  20170407   Ron  Baker  30.500000  14.50  nyk  mem -0.56  7   1-7  NaN   2  2  NaN  1  NaN
3  20170406   Ron  Baker  27.166667  16.50  nyk  was -0.56  2   5-9  2-2  12  2  NaN  2  NaN
4  20170404   Ron  Baker  37.300000  25.50  nyk  chi -0.56  6   4-7  0-1   9  4    2  4    1

【讨论】:

  • 我很高兴看到你的结果,piRSquared,但在尝试代码时出现以下错误:AttributeError: 'float' object has no attribute 'split'
  • @GilO'Brien 那是因为Stats 列中的一些值是np.nan,它们被定义为float。您应该用'' 填充na 值。试试这个df.drop('Stats', 1).join(df.Stats.fillna('').apply(prs))
  • 我很高兴它成功了......你可以做一个数字啤酒,也就是投票和接受的答案(-:
  • 你明白了。至少我能做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2022-01-23
  • 2020-12-23
  • 2022-01-01
  • 2017-11-01
  • 2014-07-13
相关资源
最近更新 更多