所以我有一个表,像这样的数据theta phi x y0 0 1 20 1 2 3--------------------90 360 4 5theta值从0到90,每个theta phi都从0到360,但有些phi在表中到处都不见了,我必须填写这些价值观。我正在尝试用熊猫做这样的工作,import pandas as pdcols=['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 dfdf=pd.concat([fill_up(i) for i in xrange(0,91)])df.to_csv("new.txt",sep=' ', index=False, header=False)如您所见,我正在为每个theta值创建一个单独的数据框,并最终将它们合并。有什么方法可以在不创建其他数据帧的情况下或更有效地实现这一目标?我还应该注意任何内存溢出,因为数据文件可能是几MB? 最佳答案 我认为您可以通过将和'phi'设置为set_index的索引,然后将reindex与pd.MultiIndex.from_product设置为您期望的所有'theta'和'phi'的值,并用,最后是interpolate,例如:new_data = (data.set_index(['theta','phi']) .reindex(pd.MultiIndex.from_product( [range(91),range(361)], names=['theta','phi'])) .interpolate().reset_index())注意reset_index和range(91)创建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(361),以在下一个命令行中添加您将“空白”的行,将range(362)中的所有行替换为空白或者,使用与原始解决方案中相同的phi = 361,您可以创建一个具有特定索引的空白数据框,您可以将new_data更改为new_data,然后将concatblanck_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 - Python填充丢失的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51459489/
10-12 16:54