访问 Pandas DataFrame 元素中的列表

Posted

技术标签:

【中文标题】访问 Pandas DataFrame 元素中的列表【英文标题】:Access a list within an element of a Pandas DataFrame 【发布时间】:2016-10-31 12:02:25 【问题描述】:

我有一个 Pandas DataFrame,它在其中一列中有一个整数列表。我想访问此列表中的各个元素。我找到了一种方法,方法是使用tolist() 并将其转回DataFrame,但我想知道是否有更简单/更好的方法。在此示例中,我将 Column A 添加到 Column B 中列表的中间元素。

import pandas as pd
df = pd.DataFrame('A' : (1,2,3), 'B': ([0,1,2],[3,4,5,],[6,7,8]))
df['C'] = df['A'] + pd.DataFrame(df['B'].tolist())[1]
df

有没有更好的方法来做到这一点?

【问题讨论】:

【参考方案1】:

您也可以简单地尝试以下方法:

df['C'] = df['A'] + df['B'].str[1]

此方法的性能:

%timeit df['C'] = df['A'] + df['B'].str[1]
#1000 loops, best of 3: 445 µs per loop

【讨论】:

【参考方案2】:

一种选择是使用apply,它应该比从中创建数据框更快:

df['C'] = df['A'] + df.apply(lambda row: row['B'][1], axis = 1) 

一些速度测试:

%timeit df['C'] = df['A'] + pd.DataFrame(df['B'].tolist())[1]
# 1000 loops, best of 3: 567 µs per loop
%timeit df['C'] = df['A'] + df.apply(lambda row: row['B'][1], axis = 1) 
# 1000 loops, best of 3: 406 µs per loop
%timeit df['C'] = df['A'] + df['B'].apply(lambda x:x[1])
# 1000 loops, best of 3: 250 µs per loop

好的。稍微好一些。 @breucopter 的回答是最快的。

【讨论】:

谢谢。非常感谢!【参考方案3】:

更直接一点的是:

df['C'] = df['A'] + df['B'].apply(lambda x:x[1])

【讨论】:

感谢闪电般的快速回答!

以上是关于访问 Pandas DataFrame 元素中的列表的主要内容,如果未能解决你的问题,请参考以下文章

从两个熊猫系列(csv的列作为DataFrame)创建元素字典

将 Pandas DataFrame 中的列组合到 DataFrame 中的列表列

Pandas 对 DataFrame 中的列 MultiIndex 使用多行

迭代 Pandas Dataframe 中的列和行

检测 pandas.DataFrame 中的列是不是是分类的有啥好的启发式方法?

如何将 Pandas 系列中的多个字典键转换为 DataFrame 中的列?