gpt4 book ai didi

Python 填充缺失数据

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:57 27 4
gpt4 key购买 nike

所以我有一个像这样的数据表

theta    phi    x   y

0 0 1 2
0 1 2 3
--------------------
90 360 4 5

theta 值从 0 到 90,每个 theta phi 从 0 到 360,但是表中缺少一些 phi ,我必须填写这些值。我正在尝试像这样使用 pandas 来完成这项工作,

import pandas as pd
cols=['theta','phi','x','y']
data = pd.read_csv('data.dat', sep=" |\t", header=None,names=cols,engine='python')


def fill_up(i):
df=data[data['theta']==i]
df.set_index('phi',inplace=True)
df= df.reindex(range(0,361)).reset_index()
df=df[cols]
df.interpolate(inplace=True)
return df

df=pd.concat([fill_up(i) for i in xrange(0,91)])
df.to_csv("new.txt",sep=' ', index=False, header=False)

如您所见,我正在为每个 theta 值创建一个单独的数据框,并最终将它们连接起来。有没有办法在不创建不同的数据框或更有效地实现这一点的情况下实现这一目标?我还应该注意任何内存溢出,因为数据文件可能有几个 mb?

最佳答案

我认为您可以通过使用 set_index 将 'theta' 和 'phi' 设置为索引来做到这一点, 然后 reindexpd.MultiIndex.from_product使用您期望的 'theta' 和 'phi' 的所有值,用 interpolate 填充 nan 值最后 reset_index比如:

new_data = (data.set_index(['theta','phi'])
.reindex(pd.MultiIndex.from_product( [range(91),range(361)],
names=['theta','phi']))
.interpolate().reset_index())

注意 range(91)range(361)为 theta 和 phi 创建所有值。

编辑空行,你可以这样做:

new_data = (data.set_index(['theta','phi'])
.reindex(pd.MultiIndex.from_product( [range(91),range(362)],
names=['theta','phi']))
.interpolate().reset_index())
new_data.loc[new_data['phi'] ==361] = ''

注意 phi 的范围是 range(362)添加一行您在下一个命令行中设为“空白”的行,替换所有 phi = 361 所在的行通过空白

或者,使用 new_data与原始解决方案一样,您可以创建一个包含特定索引的空白数据框,您可以 concat到 new_data 和 sort_index之后

blanck_frame = pd.DataFrame(data='', columns=new_data.columns
index=new_data.loc[new_data['phi'] ==360].index+0.5)
new_data = pd.concat([new_data,blanck_frame]).sort_index()
# you can add .reset_index(drop=True) at the end if you want integer indexes

关于Python 填充缺失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com