【问题标题】:Excel Copy Paste Way in PythonPython中的Excel复制粘贴方式
【发布时间】:2019-11-05 15:27:23
【问题描述】:

我有一个如下的数据框

df = pd.DataFrame([[3,2,1],[4,5,6],[10,20,30]], columns = ['A','B','C'])

    A   B   C
0   3   2   1
1   4   5   6
2  10  20  30

python中有没有什么方法可以模仿excel中的复制和粘贴功能?例如我想复制粘贴第0行A列和B列并将它们粘贴到第0行B列和C列中,这样它就会变成

    A   B   C
0   3   3   2
1   4   5   6
2  10  20  30

在一个小的数据框中,我可以使用:

df.loc[0,'C'] = df.loc[0,'B']
df.loc[0,'B'] = df.loc[0,'A']

但我的原始数据框相当大,我不想一个一个元素地做这个。 我也想这样做:

df.loc[0,['A','B']] = df.loc[0,['B','C']]

但是我在第 0 行 A 列中的数据变成了 NaN。

那么有没有办法做类似的事情,比如在 python 中的 excel 中复制粘贴(只需阻止一系列数据,复制它们并将它们粘贴到另一个现有数据的顶部)?谢谢

【问题讨论】:

  • 分配值时列名很重要,因此添加 .values 或 to_numpy() 以消除索引的影响
  • 我这样做了,但就像我上面提到的:我有一个大数据集,所以我希望代码阻止某个范围的行并将其粘贴到另一个现有行范围的顶部。谢谢。
  • @anky_91 如果您发布答案,请告诉我,我会相应地编辑我的帖子。

标签: python pandas copy-paste


【解决方案1】:

anky_91 的回答

df.loc[0, ['B', 'C']] = df.loc[0, ['A', 'B']].to_numpy()

shift

您可以通过多种方式使用 shift。这只是一个。

df.update(df.shift(axis=1)[['B', 'C']])

出于我不满意的原因,您可以向shift 提供fill_value 以保留整数dtype

df.update(df.shift(axis=1, fill_value=0)[['B', 'C']])

【讨论】:

    【解决方案2】:

    这主要是个坏主意,但如果这是您真正想做的,您可以使用.iloc 按数字寻址列并移动它们:

    In [56]: df.iloc[0, 1:] = df.iloc[0, :-1].values
    
    In [57]: df
    Out[57]:
        A   B   C
    0   3   3   2
    1   4   5   6
    2  10  20  30
    

    【讨论】:

    • 嗨兰迪,有没有可能用他们的名字而不是数字来取列的范围?谢谢。
    • 是的,正如 anky_91 的评论中所述,您可以使用 .loc 翻转您的分配,如果您想按名称分配它们,请使用 .values/.to_numpy()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多