出于某些奇怪的原因,当提供适当的字典列表时,pandas DataFrame函数似乎无法正常工作。而不是将键读取为列名,而将值读取为实际行,而是将键名读取为每一行的值。
我已经使用.from_records和.from_dict尝试了几种变体,但没有任何结果
In [44]:
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 | --- | --- |
+---+-------------+-----------+-------------+-------+------+---------+
答案 0 :(得分:2)
尝试使用
df = pd.DataFrame.from_records(results)
这应该正确格式化数据框。我正在使用熊猫0.24.1版本。
address countryCode \
0 UNIT 12A, BARROWSIDE BUSINESS PARK, SLEATY ROA... IE
1 --- NL
name requestDate valid vatNumber
0 BLACKNIGHT INTERNET SOLUTIONS LTD 2019-05-29 True 6390845P
1 --- 2019-05-29 False 6390845P
答案 1 :(得分:0)
我认为您要执行的操作有些错误,DataFrame的构造函数不会将您想要的任何数组作为参数,它可以接收
ndarray(结构化或同类),可迭代,dict或DataFrame
因此,如果您想使用字典,这是使用它的正确方法:
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoOptimization | System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
private static void LoopThroughRows(DataGridView dgv) {
DataGridViewRowCollection rows = dgv.Rows;
for (int i = rows.Count - 1; i >= 0; i--) {
DataGridViewRow row = rows[i];
}
}
这是文档提供的示例。
我认为您应该先在字典中指定一列(例如'col1'),然后再指定包含值的数组,因此您的字典似乎格式不正确:
您的>>> d = {'col1': [1, 2], 'col2': [3, 4]}
>>> df = pd.DataFrame(data=d)
>>> df
col1 col2
0 1 3
1 2 4
应该类似于:
result
或者您可以使用其他建议的不同功能!希望对您有帮助
答案 2 :(得分:0)
“假设是所有傻瓜的母亲”
我发现了问题。 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)
结果字典列表可以被熊猫正确识别,真棒!
感谢所有帮助和建议!您使我走上了正确的道路,并为我又上了一堂有价值的Python课。