Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据条件保存和删除数据帧中的行。错误:一元数的操作数类型错误:'str'_Python_Pandas_Dataframe - Fatal编程技术网

Python 根据条件保存和删除数据帧中的行。错误:一元数的操作数类型错误:'str'

Python 根据条件保存和删除数据帧中的行。错误:一元数的操作数类型错误:'str',python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个dataframe,如下所示,它是一个更大的数据集的表示,其中一个代码作为一列,另一个列作为一个更大的数据集 import pandas as pd df = pd.DataFrame({'code': [123456, 123758, 12334356, 4954968, 774853], 'col2': [1,2,3,4,5]}) 问题:如何在单独的数据框中存储并从原始数据框中删除此数据框的条目以及与该条目相关的所有列,这些列的前3个字符不

假设我有一个dataframe,如下所示,它是一个更大的数据集的表示,其中一个代码作为一列,另一个列作为一个更大的数据集

import pandas as pd
df = pd.DataFrame({'code': [123456, 123758, 12334356, 4954968, 774853],
                   'col2': [1,2,3,4,5]})
问题:如何在单独的数据框中存储并从原始数据框中删除此数据框的条目以及与该条目相关的所有列,这些列的前3个字符不是123

尝试:为此,我尝试选择所有以123开头的行,然后使用not符号~选择所有不以123开头的行。我已经将其存储在一个新的数据帧中,因为我希望保存它,然后尝试将其从原始数据帧中删除,方法是将其索引作为不需要的索引

# Converting column to a string
df['code'] = df['code'].astype(str)

# Saving entries which DONT start with 123 in a separate dataframe
df2 = df[~df['code'].str[0:3] == '123']

# Dropping those bad entries (starting with 123 chars) from dataframe
df = df.drop(df2.index, inplace=True)

但是,在执行此操作时,我遇到以下错误:

TypeError: bad operand type for unary ~: 'str'
如果您有任何其他解决方案以及我自己的更正,我们将不胜感激

所需输出:也应推广到其他条目。请注意,4954968和774853已经消失,因为它们不是以123开头的


在您的解决方案中,问题优先级运算符是必需的,括号也是必需的:

df2 = df[~(df['code'].str[0:3] == '123')]
print (df2)
      code  col2
3  4954968     4
4   774853     5
更好的方法是更改逻辑-仅选择匹配的值

df = df[(df['code'].str[0:3] == '123')]
print (df)
您可以使用startswith来标识所需的行。不需要双重否定

import pandas as pd

df = df.loc[df['code'].str.startswith('123'), :]

你缺少括号了。检查df2=df[~df['code'].str[:3]=='123']
import pandas as pd

df = df.loc[df['code'].str.startswith('123'), :]