Python 默认情况下,从字典列表中将键作为值读取
出于某种奇怪的原因,熊猫数据帧函数在提供适当的字典列表时似乎并没有按预期工作。它不是将键读取为列名,将值读取为实际行,而是将键名称读取为每行的值 我已经尝试了使用.from_记录和.from_dict的几种变体,但没有任何结果。完整代码:Python 默认情况下,从字典列表中将键作为值读取,python,pandas,list,dataframe,dictionary,Python,Pandas,List,Dataframe,Dictionary,出于某种奇怪的原因,熊猫数据帧函数在提供适当的字典列表时似乎并没有按预期工作。它不是将键读取为列名,将值读取为实际行,而是将键名称读取为每行的值 我已经尝试了使用.from_记录和.from_dict的几种变体,但没有任何结果。完整代码: In [44]: from zeep import Client import pandas as pd client = Client('http://ec.europa.eu/taxation_customs/vies/checkVatService.ws
In [44]:
from zeep import Client
import pandas as pd
client = Client('http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl')
results = []
requests = [['IE', '6390845P'],['NL', '6390845P']]
for x in requests:
results.append(client.service.checkVat(x[0],x[1]))
results
Out[44]:
[{
'countryCode': 'IE',
'vatNumber': '6390845P',
'requestDate': datetime.date(2019, 5, 29),
'valid': True,
'name': 'BLACKNIGHT INTERNET SOLUTIONS LTD',
'address': 'UNIT 12A, BARROWSIDE BUSINESS PARK, SLEATY ROAD, GRAIGUECULLEN CARLOW'
}, {
'countryCode': 'NL',
'vatNumber': '6390845P',
'requestDate': datetime.date(2019, 5, 29),
'valid': False,
'name': '---',
'address': '---'
}]
In [68]:
df = pd.DataFrame(results)
df
导致
+---+-------------+-----------+-------------+-------+------+---------+
| | 0 | 1 | 2 | 3 | 4 | 5 |
+---+-------------+-----------+-------------+-------+------+---------+
| 0 | countryCode | vatNumber | requestDate | valid | name | address |
+---+-------------+-----------+-------------+-------+------+---------+
| 1 | countryCode | vatNumber | requestDate | valid | name | address |
+---+-------------+-----------+-------------+-------+------+---------+
需要
+---+-------------+-----------+-------------+-------+------+---------+
| | countryCode | vatNumber | requestDate | valid | name | address |
+---+-------------+-----------+-------------+-------+------+---------+
| 0 | IE | 6390845P | 2019/5/29 | true | etc. | etc. |
+---+-------------+-----------+-------------+-------+------+---------+
| 1 | NL | 6390845P | 2019/5/29 | false | --- | --- |
+---+-------------+-----------+-------------+-------+------+---------+
我认为您试图做的有点错误,DataFrame的构造函数没有将您想要的任何数组作为参数,它可以接收 ndarray(结构化或同构)、Iterable、dict或DataFrame 因此,如果你想使用字典,这是正确的使用方法:
>>> d = {'col1': [1, 2], 'col2': [3, 4]}
>>> df = pd.DataFrame(data=d)
>>> df
col1 col2
0 1 3
1 2 4
这是doc提供的示例
我认为您应该首先在字典中指定一列(例如“col1”),然后指定一个包含值的数组,这样您的字典似乎格式不正确:
您的结果应类似于:
{
'countryCode' : ['IE','NL'],
'vatNumber':[6390845P,6390845P],
'requestDate': [datetime.date(2019, 5, 29),datetime.date(2019, 5, 29)],
'valid':[True, False],
'name': ['BLACKNIGHT INTERNET SOLUTIONS LTD', '---'],
'address': ['UNIT 12A, BARROWSIDE BUSINESS PARK, SLEATY ROAD, GRAIGUECULLEN CARLOW', '---']
}
或者你可以像其他人建议的那样使用不同的功能!我希望这有帮助“假设是所有混蛋之母”
我发现了问题。zeep模块没有返回本机python数据类型,我假设它返回的是标准字典
type(results[0])
Out[46]:
zeep.objects.checkVatResponse
for x in requests:
alpha = zeep.helpers.serialize_object(client.service.checkVat(x[0],x[1]))
results.append(alpha)
该模块有一个内置的助手函数,可以将其转换为字典
type(results[0])
Out[46]:
zeep.objects.checkVatResponse
for x in requests:
alpha = zeep.helpers.serialize_object(client.service.checkVat(x[0],x[1]))
results.append(alpha)
由此产生的词典列表得到了熊猫的正确认可,真棒
感谢所有的帮助和建议!您让我走上了正确的道路,给我上了另一堂有价值的Python课。您可以转置生成的数据帧。你想要的输出是什么?当我把dict传递给dataframe函数时,我得到了想要的输出。我无法重现你的问题。您运行的pandas、python和操作系统的版本是什么?这似乎是与早期函数的特定输出有关的问题。当我复制结果的输出并用它构造另一个变量时,pandas似乎能正确地解释它。版本:Python3.6.3 jupyter 5.0.0 pandas 0.24.2结果变量的完整代码:code from zeep import Client import pandas as pd Client=Client('http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl')结果=[]请求=[['IE',6390845P',['NL',6390845P']]对于请求中的x:results.append(client.service.checkVat(x[0],x[1])结果