我是新的编码和任何帮助将不胜感激。
函数应该接受一个pandas数据框作为输入。使用下面给出的has_Dict字典从tweet中提取城市,并将结果插入到同一 Dataframe 中名为“City”的新列中。如果找不到城市,则使用条目np.nan。
当字典和df有相同数量的条目时,我的代码可以工作,但只要我向df添加一个条目,我就会得到“IndexError:列表索引超出范围”。我需要它工作的df与更多的条目比字典。(数据集实际上更大,我在这里创建了一个较小的示例)。
import pandas as pd
details = {'Tweets':['Whatever #JHB', 'Yes #CPT']}
df = pd.DataFrame(details)
print(df)
Tweets
0 Whatever #JHB
1 Yes #CPT
hasDict = {'#JHB':'JHB','#CPT':'CPT'}
df['City'] = df['Tweets'].apply(lambda x : [hasDict[city] for city
in hasDict if city in x][0]).fillna(np.nan)
Output
Tweets City
0 Whatever #JHB JHB
1 Yes #CPT CPT
但当df较大时:
details = {'Tweets':['Whatever #JHB', 'Yes #CPT', 'Hello #PE']}
我明白
IndexError: list index out of range
下面的似乎工作,但我试图找出正则表达式的一部分,它是正则表达式后的str。提取?我总是需要导入正则表达式吗?(除了pandas和numpy,我不应该导入任何东西)。
df['City'] = df['Tweets'].str.extract('('+'|'.join(hasDict.keys())+')', expand=False).map(hasDict).fillna(np.nan)
3条答案
按热度按时间oogrdqng1#
只要城市总是以
#
开始,你实际上不需要字典Map,因为你可以使用正则表达式:laximzn52#
这是我如何实现你的代码,它的工作原理(我附上了一张图片到这个答案):
下面是我运行这段代码时的终端图像和我得到的输出:
希望对你有帮助。
6ju8rftf3#
你可以在
explode
(tokenize)你的dataframe之后使用map
:关于regex:
你不需要导入
re
模块,Pandas已经为它的字符串方法做了。