Python 搜索列,如果值不是所有数字,则剪切&;将值粘贴到另一列同一行

Python 搜索列,如果值不是所有数字,则剪切&;将值粘贴到另一列同一行,python,pandas,string,dataframe,Python,Pandas,String,Dataframe,想在一个让我纠结的问题上寻求帮助。我有一个数据框,三列。假设第一列是所有数字。如果列1(值中的任何位置)中存在字母,则将值剪切并粘贴到同一行中的“Column3”。我已经了解了如何使用.loc来过滤列中的某些值,并成功地应用了第3列中的文本,即“值包含字母”。但不能将代码与想法放在一起说(如果column1 value!=isdigit,则将值剪切并粘贴到column3的同一行)。我当前的测试代码搜索第1列,在值中查找字母,然后将值移动到我不想要的列底部的第3列。如果您能了解如何一起使用.loc

想在一个让我纠结的问题上寻求帮助。我有一个数据框,三列。假设第一列是所有数字。如果列1(值中的任何位置)中存在字母,则将值剪切并粘贴到同一行中的“Column3”。我已经了解了如何使用.loc来过滤列中的某些值,并成功地应用了第3列中的文本,即“值包含字母”。但不能将代码与想法放在一起说(如果column1 value!=isdigit,则将值剪切并粘贴到column3的同一行)。我当前的测试代码搜索第1列,在值中查找字母,然后将值移动到我不想要的列底部的第3列。如果您能了解如何一起使用.loc和isdigit,我将不胜感激。谢谢你抽出时间

import numpy as np
import pandas as pd
# Create a DataFrame
d = {
    'Column1': ['345634', '3fgh98', '765432', '987ke2', '234654', '09hws4'],
    'Column2': [3, 6, 8, 9, 23, 24,],
    'Column3': ['', '', '', '', '', '',]}

df = pd.DataFrame(d, columns=['Column1', 'Column2', 'Column3'])

test = df['Column1']
for i in test:
    if(str(i).isdigit()):
        continue
    else:
        df.loc[(i), 'Column3'] = i

print(df)

#df.loc[(df.Column1 != str.isdigit), 'Column3'] = str. #test code using .loc and isdigit. Notworking
上面的代码将拾取第1列中带有字母的值,并将它们移动到第3列的底部。它至少得到了我现在必须计算的值。loc out从第1列剪切并粘贴到第3列的同一行。下面是我希望发生的事情的图片

Before:

Column1   Column2   Colummn3
345634    3
3fgh98    6
765432    8
987ke2    9
234654    23
09hws4    24


After:(What I would like to have)

Column1   Column2   Colummn3
345634    3
          6         3fgh98       
765432    8
          9         987ke2
234654    23
          24        09hws4
感谢您的帮助。

使用给定的正则表达式模式和可选参数
na=False
(将
NaN
值视为
False
)创建一个布尔掩码,该掩码对应于
列1
值包含所有数字的情况,然后与此掩码一起使用,根据需要更新
Column1
Column3
中的值:

m = df['Column1'].astype(str).str.match('^\d+$', na=False)
df.loc[~m, 'Column3'] = df['Column1']
df.loc[~m, 'Column1'] = ''
结果:

print(df)

  Column1  Column2 Column3
0  345634        3        
1                6  3fgh98
2  765432        8        
3                9  987ke2
4  234654       23        
5               24  09hws4

太棒了!!非常感谢。我有个问题要问你。为什么是波浪号(~m)而不是变量(m)本身?
~
(波浪号)的具体意思是
不是
否定
。此处
~m
对应于
列1
中的条目,这些条目不完全由数字组成。您可以阅读有关布尔索引的更多信息。嘿,Shubham,应用较大的DF时会出现一个错误。(TypeError:一元~:“float”的操作数类型错误)。您的代码在测试环境中运行良好。但是行df.loc[~m,'Column3']=df['Column1']中的错误。测试和较大DF之间的唯一区别可能是空白单元格,而不是其他单元格。第1列包含所有数字值的单元格&包含数字和字母值的单元格,以及空白单元格。第3列,所有单元格或空白。这可能是一个有价值的东西吗?我无法在测试DF中复制此错误。有什么想法吗?我在研究了stackOF中的错误之后就试过了。它获取所有单元格值并将它们剪切粘贴到第3列。基本上将所有单元格移动到第3列。然后删除第1列中的所有值(所有单元格)。问题??此报告来自excel文件。如果列类型被理解为字符串而不是数字,那么这种想法会影响到您试图帮助我的内容吗?很抱歉让你感到痛苦。谢谢你,谢谢你!!!!在大型DF上非常有效。太棒了!!!