Python填充缺少的数据
所以我有一个类似这样的数据表Python填充缺少的数据,python,pandas,dataframe,Python,Pandas,Dataframe,所以我有一个类似这样的数据表 theta phi x y 0 0 1 2 0 1 2 3 -------------------- 90 360 4 5 θ值从0到90,每个θφ从0到360, 但是有些phi在表中到处都不见了,我必须把它们填上 价值观我想用熊猫来做这样的工作 import pandas as pd cols=['theta','phi','x','y'] data = pd.read_c
theta phi x y
0 0 1 2
0 1 2 3
--------------------
90 360 4 5
θ值从0到90,每个θφ从0到360,
但是有些phi在表中到处都不见了,我必须把它们填上
价值观我想用熊猫来做这样的工作
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?我认为可以通过使用
set\u index
将'theta'和'phi'设置为索引,然后使用pd.MultiIndex.from\u product
将'theta'和'phi'的所有值设置为期望值,使用插值
填充nan值,最后使用重置索引
填充nan值,例如:
new_data = (data.set_index(['theta','phi'])
.reindex(pd.MultiIndex.from_product( [range(91),range(361)],
names=['theta','phi']))
.interpolate().reset_index())
注意范围(91)
和范围(361)
以创建θ和φ的所有值
编辑空行,您可以执行以下操作:
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\u数据
,您可以创建一个带有特定索引的空白数据框,您可以concat
到新的\u数据和sort\u索引
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
可以用0到360范围内的随机数填充这些nan值吗?您想保持现有的非nan值不变吗?不,我需要从非nan值中插入nan值以获得您的答案。现在出于某些目的,我需要在结果数据文件中的每个θ块后添加一个空行,你能帮我吗。@Eular空行的概念有点模棱两可,请参阅我的编辑以了解我理解的方式。我建议第二种选择:)