要通过索引获取熊猫中的一行数据,我可以这样做:
df.loc[100].tolist()
除了执行以下操作之外,还有没有其他方法可以获取该行数据:
dict(zip(
df.columns.tolist(),
df.loc[100], tolist()
))
答案 0 :(得分:5)
尝试使用to_dict
df.loc[1].to_dict()
答案 1 :(得分:2)
您可以使用items
:
dict(df.loc[100].items())
答案 2 :(得分:2)
df.loc[x]
返回一个映射pd.Series
,因此您可以直接使用dict
构造函数:
dict(df.loc[100])
如果愿意,也可以使用to_dict
辅助方法...
这种问题提出了,您确定您完全需要dict
吗?
答案 3 :(得分:1)
假设您的数据帧为df
,并且您希望索引为k
的行可以执行:
list(df.iloc[k,:])
结果将是k
行中所有值的列表。
答案 4 :(得分:1)
如果列名不唯一会遇到问题。
演示:
>>> df = pd.DataFrame([[1,2,3,4,5], [6,7,8,9,10]], columns=['A', 'B', 'A', 'C', 'B'])
>>> df
A B A C B
0 1 2 3 4 5
1 6 7 8 9 10
>>> df.loc[1].to_dict()
{'A': 8, 'B': 10, 'C': 9}
如果这可能在您的数据框中发生,请在创建字典之前使列唯一。
这是一个想法:
>>> from itertools import count
>>>
>>> col_isdupe = zip(df.columns, df.columns.duplicated(keep=False))
>>> counters = {c:count() for c, dupe in col_isdupe if dupe}
>>> df.columns = ['{}_{}'.format(c, next(counters[c])) if c in counters else c
...: for c in df.columns]
>>> df
A_0 B_0 A_1 C B_1
0 1 2 3 4 5
1 6 7 8 9 10
>>>
>>> df.loc[1].to_dict()
{'A_0': 6, 'A_1': 8, 'B_0': 7, 'B_1': 10, 'C': 9}
答案 5 :(得分:1)
您可以使用:df.to_dict('records')
参考:pandas docs。
假设你有一个 df:
>>> df
Out[1]:
alpha beta ... log_10_rate rate
0 2.530809 3.446069 ... 1.299609 19.934677
1 1.418243 1.861504 ... 1.059239 11.461440
... ... ... ... ... ...
11241 2.462758 -0.890800 ... 1.532919 34.112962
11242 2.462758 -0.890800 ... 1.437005 27.353010
[11243 rows x 21 columns]
要将 i 行作为字典,我会这样做:
df.to_dict('records')[11242]
Out[2]:
{'alpha': 2.462758375498395,
'beta': -0.8908002057212157,
'mmax': 90.14711749088858,
...
}