在 Pandas 数据框中将 float64 数组中的所有单元格展平为 int
Posted
技术标签:
【中文标题】在 Pandas 数据框中将 float64 数组中的所有单元格展平为 int【英文标题】:Flatten all cells from float64 arrays to int in a Pandas dataframe 【发布时间】:2021-08-07 03:47:42 【问题描述】:我有一个 6 行 11 列的 Pandas DataFrame,其中包含一个 float64 数组,每个单元格中有一个值。数据框中的单元格如下所示:
这是我将数据框转换为字典后得到的结果:
'AO': "W": [-0.09898120815033484],
"X": [0.025084149326805416],
"Y": [-0.043670609717370634],
"Z": [-0.07389705882352943],
"A": [-0.018586460390565218],
"B": [-0.11756766854090006],
'DR': "W": [0.8163265306122449],
"X": [1.0814940577249577],
"Y": [0.8759551706571573],
"Z": [0.8828522920203735],
"A": [0.9473403118991668],
"B": [0.7733390301217689],
'DP': "W": [-0.14516129032258063],
"X": [0.05955334987593053],
"Y": [-0.10348491287717809],
"Z": [-0.0856079404466501],
"A": [-0.043931563001247564],
"B": [-0.1890928533238282],
'PD': "W": [-0.1255102040816326],
"X": [0.09129967776584313],
"Y": [-0.13698152666434293],
"Z": [-0.03421052631578947],
"A": [-0.0456818488984998],
"B": [-0.1711920529801324]
每行的索引是 W、X、Y、Z、A 和 B。我想摆脱每个单元格中的所有 numpy 数组结构并将这个 DataFrame 展平,以便我只能拥有 int /float 每个单元格中的值。我该怎么做?
【问题讨论】:
不要发布图片。而是发布实际的数据帧(或字典)。 谢谢@Nk03,我已经添加了输出。 【参考方案1】:试一试:
from itertools import chain
df = pd.DataFrame([list(chain(*i)) for i in df.values], index= df.index, columns= df.columns)
【讨论】:
【参考方案2】:使用applymap:
df = df.applymap(lambda x: x[0])
df
:
AO DR DP PD
W -0.098981 0.816327 -0.145161 -0.125510
X 0.025084 1.081494 0.059553 0.091300
Y -0.043671 0.875955 -0.103485 -0.136982
Z -0.073897 0.882852 -0.085608 -0.034211
A -0.018586 0.947340 -0.043932 -0.045682
B -0.117568 0.773339 -0.189093 -0.171192
通过 perfplot 的时间信息:
from itertools import chain
import numpy as np
import pandas as pd
import perfplot
np.random.seed(5)
def gen_data(n):
return pd.DataFrame(np.random.random(size=(n, 4)),
columns=['AO', 'DR', 'DP', 'PD']) \
.applymap(lambda x: np.array([x]))
def chain_comprehension(df):
return pd.DataFrame([list(chain(*i)) for i in df.values], index=df.index,
columns=df.columns)
def apply_map(df):
return df.applymap(lambda x: x[0])
if __name__ == '__main__':
out = perfplot.bench(
setup=gen_data,
kernels=[
chain_comprehension,
apply_map
],
labels=[
'chain_comprehension',
'apply_map'
],
n_range=[2 ** k for k in range(25)],
equality_check=None
)
out.save('perfplot_results.png', transparent=False)
【讨论】:
Applymap 不错以上是关于在 Pandas 数据框中将 float64 数组中的所有单元格展平为 int的主要内容,如果未能解决你的问题,请参考以下文章
Python:打印 Pandas 数据框返回 numpy.ndarray 属性错误
如何在python中将字符串转换为pandas数据框[重复]
为啥 Pandas 将我的 numpy float32 强制转换为 float64?
在Python DataFrame中将字符串转换为float64 [重复]
pandas 比较引发 TypeError:无法将 dtyped [float64] 数组与 [bool] 类型的标量进行比较