【问题标题】:How to pad dataframe with empty values when add list to new column将列表添加到新列时如何用空值填充数据框
【发布时间】:2019-07-04 19:52:21
【问题描述】:

我正在尝试根据比现有列​​短的列表向现有数据框添加新列。

列表的值基于字典,每次与键匹配时都会返回一个值。

我正在使用以下方法来检索值:

 attending_dict ={ 'Jack' :'Yes',
                   'John':'No',
                   'Paul':'Maybe'}        


List_Attended =[]
for i, row in df.iterrows():
    text = row['Invitations']
    make_list = text.split()

    for keys, values in attending_dict.items():
         if keys in make_list:
             List_Attended.append(values)

 List_Attended = [Yes,No,Maybe]

到目前为止,我已尝试使用 .loc 来填充缺失值,但它会产生以下错误消息:

new_attending = pd.Series(List_Attended)
df.loc['Attending'] = new_attending.values

raise ValueError("cannot set a row with "
ValueError: cannot set a row with mismatched columns

这是我想在我的数据框中包含的内容:

 Invitations Attending
 Jack Muller Yes 
 John Doe    No 
 Ryan Paul   NaN
 Paul Doe    Maybe

如果有人能解释如何解决这个问题,那就太好了。

【问题讨论】:

  • 你从哪里提取数据,请同时发布来源。(猜你有一个字典)谢谢
  • 尝试pd.concat([df,new_attending], ignore_index=True, axis=1) 添加一个具有不同行数的新列。
  • @anky_91 这只是我自己的一种做法,所以数据只是标记为“邀请”的列中的随机名称,我添加了字典,它只是随意将人们标记为是、否或可能基于名字。
  • @Sumanth 感谢您提供解决方案并且它确实有效,但是它用 NaN 填充最后几列,我想在它们出现在名称旁边的位置填充 NaN(因此基于我猜的索引)-抱歉没有让这一点更清楚!

标签: python-3.x pandas list dataframe nan


【解决方案1】:

用途:

attending_dict ={ 'Jack' :'Yes',
               'John':'No',
               'Paul':'Maybe'}  

使用series.map()

df['Attending']=df.Invitations.str.split(" ").str[0].map(attending_dict)
print(df)

   Invitations Attending
0  Jack Muller       Yes
1     John Doe        No
2    Ryan Paul       NaN
3     Paul Doe     Maybe

【讨论】:

  • 谢谢你,这很好,效果很好!只是想知道是否有其他解决方案,或者如果第一列中有更长的字符串,它将如何工作?抱歉问题,我只是想知道,因为我假设 str[0] 只考虑列表的第一个元素?
  • 是的,因为你说你想要一个带有名字的映射,所以我只取了名字,我想你可以看看这个:stackoverflow.com/questions/37372247/…
  • 是的,这是真的,这只是出于兴趣 - 你有什么建议可以让我检查一下吗?不过这很棒,再次感谢!
  • 对不起,我忘了添加链接,现在添加。 :) 您可以将字符串提取和映射一起用于部分匹配和映射
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 2018-08-20
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
相关资源
最近更新 更多