Python 在DataFrame中组合多种数据类型

Python 在DataFrame中组合多种数据类型,python,numpy,pandas,Python,Numpy,Pandas,我希望根据数据是否为数字来组合数据框中的列,例如: import pandas as pd import numpy as np x = {'a':[1,2], 'b':['foo','bar'],'c':[np.pi,np.e]} y = pd.DataFrame.from_dict(x) y.apply(lambda x: x.sum() if x.dtype in (np.int64,np.float64) else x.min()) 这会给出所需的输出,但似乎应该有更好的方法来写入最

我希望根据数据是否为数字来组合数据框中的列,例如:

import pandas as pd
import numpy as np

x = {'a':[1,2], 'b':['foo','bar'],'c':[np.pi,np.e]}
y = pd.DataFrame.from_dict(x)
y.apply(lambda x: x.sum() if x.dtype in (np.int64,np.float64) else x.min())
这会给出所需的输出,但似乎应该有更好的方法来写入最后一行。是否有一种简单的方法来检查数字是否为numpy标量类型,而不是检查数据类型是否在指定的numpy数据类型列表中?

您可以使用:

您可以使用:


与其在这里应用,我可能会用一个简单的列表来检查每一列是否是数字的,并将这些路径分开,然后再将它们合并回来。对于较大的帧,这将更有效

In [11]: numeric = np.array([dtype in [np.int64, np.float64] for dtype in y.dtypes])

In [12]: numeric
Out[12]: array([True, False, True])
可能有一个is\u numeric\u dtype函数,但我不确定它在哪里

现在,您可以关注这些并可能重新编制索引:

In [15]: pd.concat([y.iloc[:, numeric].sum(), y.iloc[:, ~numeric].min()]).reindex(y.columns)
Out[15]: 
a           3
b         bar
c    5.859874
dtype: object

与其在这里应用,我可能会用一个简单的列表来检查每一列是否是数字的,并将这些路径分开,然后再将它们合并回来。对于较大的帧,这将更有效

In [11]: numeric = np.array([dtype in [np.int64, np.float64] for dtype in y.dtypes])

In [12]: numeric
Out[12]: array([True, False, True])
可能有一个is\u numeric\u dtype函数,但我不确定它在哪里

现在,您可以关注这些并可能重新编制索引:

In [15]: pd.concat([y.iloc[:, numeric].sum(), y.iloc[:, ~numeric].min()]).reindex(y.columns)
Out[15]: 
a           3
b         bar
c    5.859874
dtype: object

df.\u获取数字数据\u谢谢你们两位。这个私有方法真的很管用。df.\u获取\u数值\u数据谢谢你们两位。这种私有方法确实起到了作用。