在汇总每个单元格中包含数组的数据框的列时遇到问题。 我尝试使用df.sum()来汇总列,希望获得总列数组,例如列“ common”的[4,1,1,4,1]。 但是我只有一个空系列。
df_sum = df.sum()
print(df_sum)
Series([], dtype: float64)
在这种情况下如何获取汇总列?
答案 0 :(得分:1)
在熊猫中使用const
object
数据框通常不是一个好主意,特别是用python列表填充单元,因为这样会降低性能。
不过,您可以使用itertools.chain.from_iterable
dtypes
您也可以使用df.apply(lambda s: list(it.chain.from_iterable(s.dropna())))
,但我说它要慢
sum
我明白了为什么您会认为df.apply(lambda s: s.dropna().sum())
在这里可以工作,甚至显式设置df.sum
的原因,但是矢量化的skipna=True
在这种情况下显示出一种奇怪的行为。但是再说一次,这些是使用带有列表的DataFrame的缺点
答案 1 :(得分:0)
IIUC,您可能仅可以使用列表理解来处理任务:
df = pd.DataFrame({'d1':[np.nan, [1,2], [4]], 'd2':[[3], np.nan, np.nan]})
>>> df
d1 d2
0 NaN [3]
1 [1, 2] NaN
2 [4] NaN
df_sum = [i for a in df['d1'] if type(a) is list for i in a]
>>> df_sum
[1, 2, 4]
如果您需要对整个DataFrame(或多列)求和,请在使用列表推导之前使用numpy.ravel()展平数据框。
df_sum = [i for a in np.ravel(df.values) if type(a) is list for i in a]
>>> df_sum
[3, 1, 2, 4]