Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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:根据字符串长度筛选字符串数据_Python_String_Pandas_Csv_Filter - Fatal编程技术网

Python:根据字符串长度筛选字符串数据

Python:根据字符串长度筛选字符串数据,python,string,pandas,csv,filter,Python,String,Pandas,Csv,Filter,我喜欢过滤掉字符串长度不等于10的数据 如果我试图过滤掉任何列A或B的字符串长度不等于10的行,我会尝试这样做 df=pd.read_csv('filex.csv') df.A=df.A.apply(lambda x: x if len(x)== 10 else np.nan) df.B=df.B.apply(lambda x: x if len(x)== 10 else np.nan) df=df.dropna(subset=['A','B'], how='any') 这工作缓慢,但正在工作

我喜欢过滤掉字符串长度不等于10的数据

如果我试图过滤掉任何列A或B的字符串长度不等于10的行,我会尝试这样做

df=pd.read_csv('filex.csv')
df.A=df.A.apply(lambda x: x if len(x)== 10 else np.nan)
df.B=df.B.apply(lambda x: x if len(x)== 10 else np.nan)
df=df.dropna(subset=['A','B'], how='any')
这工作缓慢,但正在工作

但是,当A中的数据不是字符串而是数字(在读取输入文件时解释为数字)时,有时会产生错误


如果行中有数字,则它们将转换为浮点数


从cvs导入后,将所有行转换为字符串。为了获得更好的性能,将lambda拆分为多个线程。

如果行中有数字,则它们将转换为浮点数

import pandas as pd

df = pd.read_csv('filex.csv')
df['A'] = df['A'].astype('str')
df['B'] = df['B'].astype('str')
mask = (df['A'].str.len() == 10) & (df['B'].str.len() == 10)
df = df.loc[mask]
print(df)
从cvs导入后,将所有行转换为字符串。为了获得更好的性能,将lambda拆分为多个线程

import pandas as pd

df = pd.read_csv('filex.csv')
df['A'] = df['A'].astype('str')
df['B'] = df['B'].astype('str')
mask = (df['A'].str.len() == 10) & (df['B'].str.len() == 10)
df = df.loc[mask]
print(df)
应用于filex.csv:

A,B
123,abc
1234,abcd
1234567890,abcdefghij
上面的代码打印出来

            A           B
2  1234567890  abcdefghij
应用于filex.csv:

A,B
123,abc
1234,abcd
1234567890,abcdefghij
上面的代码打印出来

            A           B
2  1234567890  abcdefghij

根据其他列及其值的给定条件筛选出行的一种更为简洁的方法:

假设df为:

data={"names":["Alice","Zac","Anna","O"],"cars":["Civic","BMW","Mitsubishi","Benz"],
     "age":["1","4","2","0"]}

df=pd.DataFrame(data)
df:
  age        cars  names
0   1       Civic  Alice
1   4         BMW    Zac
2   2  Mitsubishi   Anna
3   0        Benz      O
然后:


在上述条件中,我们首先查看字符串的长度,然后检查字符串中是否存在字母(“i”),最后检查第一列中的整数值。

一种更为简洁的方式,根据其他列的给定条件及其值过滤行:

假设df为:

data={"names":["Alice","Zac","Anna","O"],"cars":["Civic","BMW","Mitsubishi","Benz"],
     "age":["1","4","2","0"]}

df=pd.DataFrame(data)
df:
  age        cars  names
0   1       Civic  Alice
1   4         BMW    Zac
2   2  Mitsubishi   Anna
3   0        Benz      O
然后:


在上述条件下,我们首先查看字符串的长度,然后检查字符串中是否存在字母(“i”),最后检查第一列中的整数值。

您可以使用
df.apply(len)
。它将给出结果

您可以使用
df.apply(len)
。它将为您提供结果

我个人认为这是最简单的方法:

df['column_name'] = df[df['column_name'].str.len()!=10]

我个人认为这是最简单的方法:

df['column_name'] = df[df['column_name'].str.len()!=10]

从A列和B列中筛选出长度为10以外的值,这里我将lambda表达式传递给map()函数。map()函数始终适用于系列对象

 df = df[df['A'].map(lambda x: len(str(x)) == 10)]
 df = df[df['B'].map(lambda x: len(str(x)) == 10)]

从A列和B列中筛选出长度为10以外的值,这里我将lambda表达式传递给map()函数。map()函数始终适用于系列对象

 df = df[df['A'].map(lambda x: len(str(x)) == 10)]
 df = df[df['B'].map(lambda x: len(str(x)) == 10)]

可以使用applymap一次筛选所有需要的列,然后使用.all()方法只筛选两列都为True的行

#The *mask* variable is a dataframe of booleans, giving you True or False for the selected condition
mask = df[['A','B']].applymap(lambda x: len(str(x)) == 10)

#Here you can just use the mask to filter your rows, using the method *.all()* to filter only rows that are all True, but you could also use the *.any()* method for other needs
df = df[mask.all(axis=1)]

可以使用applymap一次筛选所有需要的列,然后使用.all()方法只筛选两列都为True的行

#The *mask* variable is a dataframe of booleans, giving you True or False for the selected condition
mask = df[['A','B']].applymap(lambda x: len(str(x)) == 10)

#Here you can just use the mask to filter your rows, using the method *.all()* to filter only rows that are all True, but you could also use the *.any()* method for other needs
df = df[mask.all(axis=1)]

如果你解释了你提供的代码如何回答问题,这将是一个更好的答案。如果你解释了你提供的代码如何回答问题,这将是一个更好的答案。虽然这在一开始似乎更方便,但它比使用apply慢,特别是在更大的数据集上。这与公认的答案相同。虽然一开始这似乎更方便,但它比使用apply慢,尤其是在更大的数据集上。这与公认的答案相同。