在Pandas中获取一行数据作为字典

时间:2018-12-17 22:00:45

标签: python pandas

要通过索引获取熊猫中的一行数据,我可以这样做:

df.loc[100].tolist()

除了执行以下操作之外,还有没有其他方法可以获取该行数据:

dict(zip(
    df.columns.tolist(),
    df.loc[100], tolist()
))

6 个答案:

答案 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)

Pandas DataFrame 到字典列表

您可以使用: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,
...
}