Python:检查字典中是否存在dataframe单元格值。如果存在,用字典键替换数据帧值

Python:检查字典中是否存在dataframe单元格值。如果存在,用字典键替换数据帧值,python,dataframe,Python,Dataframe,我有一个csv文件(或数据帧),如下所示: Text Location State A Florida, USA Florida B NY New York C D abc 以及一个键值对为: stat_map = { 'FL': 'Florida', 'NY': 'NewYork', 'AR': 'Arkansas', } 如何删除第3行和第4行,即带有文本C&D的行,以

我有一个csv文件(或数据帧),如下所示:

Text    Location    State
A   Florida, USA    Florida
B   NY              New York
C       
D   abc 
以及一个键值对为:

stat_map = {
        'FL': 'Florida',
        'NY': 'NewYork',
        'AR': 'Arkansas',
}
如何删除第3行和第4行,即带有文本C&D的行,以便我的数据框仅包含我在字典中有值的行。 最终输出应如下所示:

Text    Location    State
    A   Florida, USA    Florida
    B   NY              New York

请提供帮助。

您要查找的是,它用
映射器中提供的值替换了一个值,此处
表示映射

我将重复使用您提供的数据进行说明

import pandas as pd

states_map = {
        'AK': 'Alaska',
        'AL': 'Alabama',
        'AR': 'Arkansas',
        'CA': 'California',  # Enrich the dict for the current example
        'NY': 'New York'     # Same as above
}

>>> df
Out[]:
               State
0    California, USA
1  Beverly Hills, CA
2         California
3                 CA
4            NY, USA
5                USA
使用
map
讨论的方法将给出

states = df['State'].str.split(', ').str[0]

>>> states
Out[]:
0       California
1    Beverly Hills
2       California
3               CA
4               NY
5              USA
Name: State, dtype: object

>>> states.map(states_map)
Out[]:
0           NaN
1           NaN
2           NaN
3    California
4      New York
5           NaN
Name: State, dtype: object

但这并不是最优的,因为您使用
拆分从第1行中释放信息,使用
映射从第0行和第2行中释放信息

我认为这样做可以做得更好:

使用
expand=True
找到状态正确的地方 使用
~
(按位NOT)可以得到掩码的倒数

df_unknown = df_parts[~mask]

>>> df_unknown
Out[]:
               0     1
0            NaN   USA
1  Beverly Hills    CA
2            NaN  None
3             CA  None
4             NY   USA
5            USA  None
在状态未知的地方使用
map
并在蒙版
df_部件中设置这些值

df_parts[~mask]=df_unknown.apply(lambda col:col.map(states_map))

统一价值观 替换原始数据帧中的策展值

df['State_new'] = df_parts[0].fillna(df_parts[1])

>>> df
Out[]:
               State   State_new
0    California, USA  California
1  Beverly Hills, CA  California
2         California  California
3                 CA  California
4            NY, USA    New York
5                USA         NaN

这可能不是一个完美的方法,但希望它能有所帮助。

您正在寻找的是,它用
映射器中提供的值替换了一个值,这里
说明了映射

我将重复使用您提供的数据进行说明

import pandas as pd

states_map = {
        'AK': 'Alaska',
        'AL': 'Alabama',
        'AR': 'Arkansas',
        'CA': 'California',  # Enrich the dict for the current example
        'NY': 'New York'     # Same as above
}

>>> df
Out[]:
               State
0    California, USA
1  Beverly Hills, CA
2         California
3                 CA
4            NY, USA
5                USA
使用
map
讨论的方法将给出

states = df['State'].str.split(', ').str[0]

>>> states
Out[]:
0       California
1    Beverly Hills
2       California
3               CA
4               NY
5              USA
Name: State, dtype: object

>>> states.map(states_map)
Out[]:
0           NaN
1           NaN
2           NaN
3    California
4      New York
5           NaN
Name: State, dtype: object

但这并不是最优的,因为您使用
拆分从第1行中释放信息,使用
映射从第0行和第2行中释放信息

我认为这样做可以做得更好:

使用
expand=True
找到状态正确的地方 使用
~
(按位NOT)可以得到掩码的倒数

df_unknown = df_parts[~mask]

>>> df_unknown
Out[]:
               0     1
0            NaN   USA
1  Beverly Hills    CA
2            NaN  None
3             CA  None
4             NY   USA
5            USA  None
在状态未知的地方使用
map
并在蒙版
df_部件中设置这些值

df_parts[~mask]=df_unknown.apply(lambda col:col.map(states_map))

统一价值观 替换原始数据帧中的策展值

df['State_new'] = df_parts[0].fillna(df_parts[1])

>>> df
Out[]:
               State   State_new
0    California, USA  California
1  Beverly Hills, CA  California
2         California  California
3                 CA  California
4            NY, USA    New York
5                USA         NaN

这可能不是一个完美的方法,但希望它能有所帮助。

Hi(再次)@Ritika,您应该始终添加一些示例数据来说明您的问题(就像您的数据)。Hi Fabien,我是Python和stack overflow的新手,很抱歉这些问题。我更新了我的帖子。我实际上是在下载json文件中的一些tweet,将json文件中的文本和位置提取到数据帧中。现在,我还需要对所有推特进行位置聚合,并进行情感分析和主题建模。“数据帧位置”列的值类似于“CA”、“USA”、“XYZ、CA”、“CA、USA”、“California”。有些是空白值,有些是随机值。你能帮我进行情绪分析和话题建模吗?我上面发布的代码是将不同的位置格式替换为所有推特的特定位置格式。但这是错误的。此外,我还需要对这些推文进行情绪分析和主题建模。在回答了这个问题后,你刚刚用一个新的问题替换了这个问题。而且它是你们打开的复制品。我不明白你为什么这么做,这是一种非常糟糕的做法,答案不再有上下文,也不会对任何人有用。嗨(再次)@Ritika,你应该总是添加一些示例数据来说明你的问题(就像你的数据)。嗨,Fabien,我是Python和堆栈溢出的新手,很抱歉这些问题。我更新了我的帖子。我实际上是在下载json文件中的一些tweet,将json文件中的文本和位置提取到数据帧中。现在,我还需要对所有推特进行位置聚合,并进行情感分析和主题建模。“数据帧位置”列的值类似于“CA”、“USA”、“XYZ、CA”、“CA、USA”、“California”。有些是空白值,有些是随机值。你能帮我进行情绪分析和话题建模吗?我上面发布的代码是将不同的位置格式替换为所有推特的特定位置格式。但这是错误的。此外,我还需要对这些推文进行情绪分析和主题建模。在回答了这个问题后,你刚刚用一个新的问题替换了这个问题。而且它是你们打开的复制品。我不明白你为什么这么做,这是一个非常糟糕的做法,答案不再有上下文,也不会为任何人服务。嘿,法比恩,谢谢你的回复亲爱的。但是mask=df_parts.isin(states_map.values())我手动删除了错误,并且成功了。但是,如何在上面的代码中使用strip或任何其他函数才能使其正常工作。state列值在我从json文件提取并保存在dataframe中时有空格。因此,无论哪里有空间,你共享的逻辑都不起作用,如果没有空间,它就会完美地工作。您能告诉我如何删除空格吗。在将状态中的值存储为df['Location']=list(map(lambda t:t['user']['Location'].strip(),data))时尝试使用strip函数,但出现错误,即'NoneType'对象没有属性'strip'。嘿,Fabien,它起作用了。非常感谢你的帮助。非常感谢你。我现在得到了带有文本和状态列的数据帧。您是否介意进一步帮助我,我现在如何进行情绪分析和主题建模。我现在不知道如何进一步构造循环来完成这些状态操作。@Ritika,不客气,很高兴它成功了。如果你还需要的话,你应该尝试一个新问题。嘿,法比恩,谢谢你的回答,亲爱的。但是mask=df_parts.isin(states_map.values())我手动删除了错误,并且成功了。但是,如何在上面的代码中使用strip或任何其他函数才能使其正常工作。state列值在我从json文件提取并保存在dataframe中时有空格。所以无论spac在哪里
df['State_new'] = df_parts[0].fillna(df_parts[1])

>>> df
Out[]:
               State   State_new
0    California, USA  California
1  Beverly Hills, CA  California
2         California  California
3                 CA  California
4            NY, USA    New York
5                USA         NaN