如何用Python填充丢失的数据?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (147)

我有一张表,类似于这样的数据

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)

如你所见,我正在为每个θ值创建一个单独的数据框架,并最终将它们连接起来。有没有任何方法可以做到这一点,而不创建一个不同的数据,或更有效地实现这一点?另外,当数据文件可能是几个MB时,我应该注意内存溢出吗?

提问于
用户回答回答于

我认为你可以通过设置‘theta’和‘phi’作为索引set_index,然后reindex带着pd.MultiIndex.from_product使用你所期望的“theta”和“phi”的所有值,将nan值填充为interpolate最后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)来创建θ和Phi的所有值。

扫码关注云+社区

领取腾讯云代金券