Python 如何修剪dataframe列中的列表

Python 如何修剪dataframe列中的列表,python,pandas,Python,Pandas,我对蟒蛇/熊猫有点陌生 我将json转换为csv。现在有一列仍然像这样,并且包含几个属性 location 0 {'country': 'United States', 'state': 'New Jer... 1 {'country': 'Australia', 'state': 'Queensland'... 2 {'country': 'United States', 'state': 'Texa

我对蟒蛇/熊猫有点陌生

我将json转换为csv。现在有一列仍然像这样,并且包含几个属性

                                            location
0  {'country': 'United States', 'state': 'New Jer...
1  {'country': 'Australia', 'state': 'Queensland'...
2  {'country': 'United States', 'state': 'Texas',...
3  {'country': 'Australia', 'state': None, 'city'...
4  {'country': 'United States', 'state': 'Califor...
基本上,我想要的是一个简单的列,只包含作为字符串的country值。所以看起来有点像这样:

        location
0  United States
1  Australia
2  United States
3  Australia
4  United States

非常感谢您的帮助。

如果本栏由字典填写,请使用:

print (type(df.loc[0, 'location']))
<class 'dict'>

df['location'] = df['location'].str.get('country')
print (df)
        location
0  United States
1      Australia
2  United States
3      Australia
4  United States
如果有字符串:

print (type(df.loc[0, 'location']))
<class 'str'>

import ast

df['location'] = df['location'].apply(ast.literal_eval).str.get('country')

print (df)
        location
0  United States
1      Australia
2  United States
3      Australia
4  United States

如果列由字典填充,请使用:

print (type(df.loc[0, 'location']))
<class 'dict'>

df['location'] = df['location'].str.get('country')
print (df)
        location
0  United States
1      Australia
2  United States
3      Australia
4  United States
如果有字符串:

print (type(df.loc[0, 'location']))
<class 'str'>

import ast

df['location'] = df['location'].apply(ast.literal_eval).str.get('country')

print (df)
        location
0  United States
1      Australia
2  United States
3      Australia
4  United States

直接阅读Json,如下所示:

import pandas as pd
df = pd.read_json ('jsnotation.json')
df现在是一个数据帧。因此,打印将提供以下输出:

    Country    State
0   USA        Texas
1   Australia  Qeensland
2   USA        California
现在,您可以获得所需的结果,如:

print(df['country'])

   Country    
0   USA       
1   Australia 
2   USA       
要更改标题,请执行以下操作:

df = df.rename(columns={'Country': 'Location'})

直接阅读Json,如下所示:

import pandas as pd
df = pd.read_json ('jsnotation.json')
df现在是一个数据帧。因此,打印将提供以下输出:

    Country    State
0   USA        Texas
1   Australia  Qeensland
2   USA        California
现在,您可以获得所需的结果,如:

print(df['country'])

   Country    
0   USA       
1   Australia 
2   USA       
要更改标题,请执行以下操作:

df = df.rename(columns={'Country': 'Location'})

您可以直接从具有类似键的字典列表构建数据帧。因此,在构建新数据框之前,只需将列中的项转换为列表形式。dict列表中的键成为新列

这可以用一行代码来解决-

df = pd.DataFrame({'Location':[{'country': 'United States', 'state': 'New Jersey'},
                               {'country': 'Australia', 'state': 'Queensland'},
                               {'country': 'United States', 'state': 'Texas'}]})


#Building a dataframe directly from a list of dictionaries with similar keys
df2 = pd.DataFrame(list(df['Location'].values))
print(df2)

您可以直接从具有类似键的字典列表构建数据帧。因此,在构建新数据框之前,只需将列中的项转换为列表形式。dict列表中的键成为新列

这可以用一行代码来解决-

df = pd.DataFrame({'Location':[{'country': 'United States', 'state': 'New Jersey'},
                               {'country': 'Australia', 'state': 'Queensland'},
                               {'country': 'United States', 'state': 'Texas'}]})


#Building a dataframe directly from a list of dictionaries with similar keys
df2 = pd.DataFrame(list(df['Location'].values))
print(df2)

我假设如果你参加:

typedf[位置][0]

您将得到str作为您读入的csv的数据帧的输出df

也就是说,有两种方法可以解决这个问题:

将字符串转换为字典,并将键/值对提取到列中 您可以通过运行以下命令来执行此操作:

导入ast

df[location]=df[location].applylambda x:ast.literal\u evalx

这将获取数据帧中的每一行,并将字符串表示形式转换为所需的字典数据类型,以便进行争论。接下来,我们可以通过运行以国家/地区列为例手动将值提取到列中:

df['location']=df['location'].str.get'country'

这会给你你想要的结果

避免将数据转换为csv并直接读取json文件 Pandas库包含一个pd.read_json函数,该函数可以将.json处理为Pandas数据帧


pd.read_json r'保存json文件的路径\file Name.json'

我假设如果您运行:

typedf[位置][0]

您将得到str作为您读入的csv的数据帧的输出df

也就是说,有两种方法可以解决这个问题:

将字符串转换为字典,并将键/值对提取到列中 您可以通过运行以下命令来执行此操作:

导入ast

df[location]=df[location].applylambda x:ast.literal\u evalx

这将获取数据帧中的每一行,并将字符串表示形式转换为所需的字典数据类型,以便进行争论。接下来,我们可以通过运行以国家/地区列为例手动将值提取到列中:

df['location']=df['location'].str.get'country'

这会给你你想要的结果

避免将数据转换为csv并直接读取json文件 Pandas库包含一个pd.read_json函数,该函数可以将.json处理为Pandas数据帧


pd.read_json r'保存json文件的路径\file Name.json'

什么是print typedf.loc[0',location']?什么是print typedf.loc[0',location']?快速跟进问题:您的回答工作得非常好。但是现在我得到了另一个名为Unnamed:0的第一列,它只包含我用第二种方法处理字符串的索引。我可以直接删除它,但有没有办法不首先创建它?@BenW-值类似于print df.index?如果写入csv文件,您需要避免它吗?然后使用df.to_csvfile,index=false快速跟进问题:您的回答工作得很好。但是现在我得到了另一个名为Unnamed:0的第一列,它只包含我用第二种方法处理字符串的索引。我可以直接删除它,但有没有办法不首先创建它?@BenW-值类似于print df.index?如果写入csv文件,您需要避免它吗?然后使用df.to_csvfile,index=False