Pandas dataframe OrderedDict 提取数据
Pandas dataframe OrderedDict extract data
我有一个包含一列三行的 Database.csv 文件,这些是使用 simple-salesforce 从 salesforce 导出的数据,我尝试从 OrderedDict 单元格中获取 'Name' 值数据('Name','Demand')。
数据框
Type__c
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/123430000004C93AAE')])), ('Name', 'Stand')])
使用下面的代码,我读取了 csv 文件,并为每一行分配了包含“OrderedDict([....)”的值来命名,我想打印“名称”字段值,
import pandas as pd
from collections import OrderedDict
df = pd.read_csv('Database.csv')
for index, row in df.iterrows():
name = df._get_value(index, 'Type__c')
base=OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234500000001erAAA')])), ('Name', 'Private')])
print("\n",name['Name'])
print(base['Name'])
结果:
.
print("\n",name['Name'])
TypeError: string indices must be integers
当我将 print("\n",name['Name']) 更改为 print("\n",name) 以测试手动添加的 OrderedDict 时,我可以看到它有效
import pandas as pd
from collections import OrderedDict
df = pd.read_csv('Database.csv')
for index, row in df.iterrows():
name = df._get_value(index, 'Type__c')
test=OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234500000001erAAA')])), ('Name', 'Private')])
***print("\n",name)***
print(test['Name'])
结果:
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
Private
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
Private
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/123430000004C93AAE')])), ('Name', 'Stand')])
Private
我有一个包含数千行的文件,必须有办法创建一个名为“名称”的新列并添加文本数据
最后我想实现
来自
Type__c
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/123430000004C93AAE')])), ('Name', 'Stand')])
到
Name
Demand
Demand
Stand
欢迎来到 SO 社区 Pamuk!
与遍历数据帧的行相比,将特定函数“应用”到整个列(甚至数据帧的子集)效率要高得多。这样,pandas 将为您处理性能,并且通常更具可读性(因为您不必添加任何迭代逻辑)。
以下是如何使用应用和快速 lambda 函数获取“名称”列的方法(只有最后一行与您相关,其余行用于复制示例数据框):
from collections import OrderedDict
import pandas as pd
data = [
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')]),
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')]),
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/123430000004C93AAE')])), ('Name', 'Stand')]),
]
df = pd.DataFrame({"Type__c": data})
df["Name"] = df["Type__c"].apply(lambda x: x["Name"])
有关更多示例和详细信息,请参阅 Pandas Series.apply
自 df["Type__c"]
文档。
对于涉及一次使用更多列的更复杂的逐行操作,您可以查看文档中的 DataFrame.apply
并将函数应用于数据框本身(或其子集)。
有关文档中与您正在做的事情非常相关的更具可读性的部分,请查看 Function Application 上的 Pandas 用户指南部分。
我有一个包含一列三行的 Database.csv 文件,这些是使用 simple-salesforce 从 salesforce 导出的数据,我尝试从 OrderedDict 单元格中获取 'Name' 值数据('Name','Demand')。
数据框
Type__c
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/123430000004C93AAE')])), ('Name', 'Stand')])
使用下面的代码,我读取了 csv 文件,并为每一行分配了包含“OrderedDict([....)”的值来命名,我想打印“名称”字段值,
import pandas as pd
from collections import OrderedDict
df = pd.read_csv('Database.csv')
for index, row in df.iterrows():
name = df._get_value(index, 'Type__c')
base=OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234500000001erAAA')])), ('Name', 'Private')])
print("\n",name['Name'])
print(base['Name'])
结果:
.
print("\n",name['Name'])
TypeError: string indices must be integers
当我将 print("\n",name['Name']) 更改为 print("\n",name) 以测试手动添加的 OrderedDict 时,我可以看到它有效
import pandas as pd
from collections import OrderedDict
df = pd.read_csv('Database.csv')
for index, row in df.iterrows():
name = df._get_value(index, 'Type__c')
test=OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234500000001erAAA')])), ('Name', 'Private')])
***print("\n",name)***
print(test['Name'])
结果:
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
Private
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
Private
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/123430000004C93AAE')])), ('Name', 'Stand')])
Private
我有一个包含数千行的文件,必须有办法创建一个名为“名称”的新列并添加文本数据
最后我想实现 来自
Type__c
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')])
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/123430000004C93AAE')])), ('Name', 'Stand')])
到
Name
Demand
Demand
Stand
欢迎来到 SO 社区 Pamuk!
与遍历数据帧的行相比,将特定函数“应用”到整个列(甚至数据帧的子集)效率要高得多。这样,pandas 将为您处理性能,并且通常更具可读性(因为您不必添加任何迭代逻辑)。
以下是如何使用应用和快速 lambda 函数获取“名称”列的方法(只有最后一行与您相关,其余行用于复制示例数据框):
from collections import OrderedDict
import pandas as pd
data = [
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')]),
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/1234400000001ddAAA')])), ('Name', 'Demand')]),
OrderedDict([('attributes', OrderedDict([('type', 'Type__c'), ('url', '/services/data/v42.0/sobjects/Type__c/123430000004C93AAE')])), ('Name', 'Stand')]),
]
df = pd.DataFrame({"Type__c": data})
df["Name"] = df["Type__c"].apply(lambda x: x["Name"])
有关更多示例和详细信息,请参阅 Pandas Series.apply
自 df["Type__c"]
文档。
对于涉及一次使用更多列的更复杂的逐行操作,您可以查看文档中的 DataFrame.apply
并将函数应用于数据框本身(或其子集)。
有关文档中与您正在做的事情非常相关的更具可读性的部分,请查看 Function Application 上的 Pandas 用户指南部分。