pandas - 熊猫:如何选择数据框类型为列表的列?
问题描述
我有一个 pandas 数据框,其中一些列是 type list
。我所有的列都是相同的类型(或者所有元素都是列表或不是)。如何只选择这些列?
如果我得到dtypes
它们都是对象类型:
In [44]: df = pd.DataFrame([['a', [1,2]], ['b', [3,4]]], columns=['x', 'y'])
In [45]: df
Out[45]:
x y
0 a [1, 2]
1 b [3, 4]
In [46]: df.dtypes
Out[46]:
x object
y object
dtype: object
解决方案
您可以编写自己的函数来指定列是否包含所有列表:
def all_lists(array):
return all(isinstance(x, list) for x in array)
list_types = df.apply(all_lists)
print(list_types)
x False
y True
dtype: bool
然后使用list_types
系列对我们的数据进行子集化:
list_type_subset = df.loc[:, list_types]
print(list_type_subset)
y
0 [1, 2]
1 [3, 4]
一些重要的注意事项:
- 如果您有一个巨大的数据框,检查每个值是否是一个列表对象可能会很耗时,因为我们正在迭代每个值并手动检查。
list
不是实际dtype
的 - 当dtype不是数字、布尔值、日期时间或其他官方"object"
时,dtype 本质上是 pandas 使用的统称。这就是为什么我们必须以稍微迂回的方式做事。dtype
dtype
推荐阅读
- java - 在 Java 中使用带有 toString 方法的数组
- excel - Index match in VBA referencing a table
- java - How to ignore Map related braces while converting json to Java object using Jackson
- powershell - How to write a custom event log by an already existing provider with PowerShell?
- mysql - 知道特定列是否存在
- xamarin.forms - First try at HTTPClient in Xamarin.Forms not working
- python - 如何获取列表中两个相同元素之间的连续元素?
- c - Arduino - 串行通信不起作用
- python - 在 Python 中创建带有条件的函数
- javascript - 在我的 apollo graphQL express 服务器中实现一个套接字连接