如何有效地传输数据框中的值?

时间:2019-10-19 11:10:48

标签: python pandas dataframe

我想问问,是否有比在一个单元格中输入所有单元格位置更有效的方法来传输值?

假设有一组具有某些输入的像元(120,50:100),而还有另一组空像元(0:50,110)。两组单元格的大小均为50 * 1(总共50个单元格),但列和行的数量不同。

在这种情况下,我想进行两种转换:

第一次转换:
将单元格(120,50:100)中的输入转移到单元格(0:50,110),这样单元格(0,110)=单元格(120,50),单元格(1,110)=单元格(120,51) ),...,单元格(49、110)=单元格(120、99)。

第二次转化:
将单元格(120,50:100)中的输入转移到单元格(0:50,110),这样单元格(0,110)=单元格(120,99),单元格(1,110)=单元格(120,98) ),...,单元格(49,110)=单元格(120,50)

除了在每次转换中通过命令df.iloc[a, b] = df.iloc[c, d]直接分配所需的值50次之外,还有一种更有效的方法可以执行上述转换。非常感谢。

1 个答案:

答案 0 :(得分:1)

使用iloc(即df.iloc[:50, 110] = df.iloc[120, 50:100]进行替换可能无法正常工作,因为在这种情况下,iloc返回了Series,而Series记住了索引(列在这种情况下的名称)。在这种情况下,assignmen运算符=始终替换相同索引的元素。因此,由于两个系列的索引不同(df.iloc[:50, 110]以行名或索引作为索引,df.iloc[120, 50:100]以列名或索引作为索引),替换错误。

如果打印df.iloc[:50, 110].indexdf.iloc[120, 50:100].index,则可以看到此信息。仅当这些索引匹配时才进行替换,这不太可能。

要实现所需的功能,可以使用底层numpy数组,该数组不对索引进行任何检查。

df.values[:50, 110] = df.values[120, 50:100]

并用于颠倒分配顺序:

df.values[:50, 110] = df.values[120, 50:100:-1]