访问 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 使用多行