使用panda处理csv文件。
我的任务是过滤名为manual_raw_value
的列上的文件,如下所示
我想只保留满足以下条件的行:
a = ['0','1','2','3','4','5','6','7','8','9',':','/','.',',','%','$','€']
仅保留manual_raw_value
中单元格值仅为the list a
中描述的字符组合的行。
我该怎么做? 我尝试了以下内容,其中删除了单元格中有字母的行。
# coding: utf-8
import os
import pandas as pd
df = pd.read_csv('file.csv',sep=',')
b = ['a','b','c','d','e','f','g','h','i','g','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
joined_2 = "|".join(b)
mask_2 = ~df['manual_raw_value'].str.contains(joined_2)
cols = ['manual_raw_value']
df = df[mask_2].reset_index(drop=True)
df.to_csv('file_2.csv',index=False,sep=',')
这样做的有效方法是什么?
答案 0 :(得分:0)
您可以将此正则表达式 r'^[\d:/.,%$€]+$'
与str.match
一起使用,\d
是0-9
的缩写;
这里将要匹配的字符放在字符类[\d:/.,%$€]
中,然后匹配列表中的任何字符,然后使用锚点^
和$
来表示字符的开始和结束字符串^[\d:/.,%$€]+$
然后匹配一个字符串,该字符串包含一个或多个(此处 + 表示的)字符感兴趣:
实施例:
df = pd.DataFrame({"manual_raw_value": ["1232", "sdk", ".32", "$299", "*23", "€21", "/21"]})
df
# manual_raw_value
#0 1232
#1 sdk
#2 .32
#3 $299
#4 *23
#5 €21
#6 /21
a = r'^[\d:/.,%$€]+$'
a
# '^[\\d:/\\.,%\\$\xe2\x82\xac]+$'
df[df.manual_raw_value.str.match(a)]
#manual_raw_value
#0 1232
#2 .32
#3 $299
#5 €21
#6 /21
或者从列表a
构建模式:
pattern = '^[{}]+$'.format(''.join(a))
df[df.manual_raw_value.str.match(pattern)]
#manual_raw_value
#0 1232
#2 .32
#3 $299
#5 €21
#6 /21
答案 1 :(得分:0)
您可以使用isalpha
进行过滤:
<item name="android:windowDisablePreview">true</item>
<强>计时强>:
df = df[~df['manual_raw_value'].str.isalpha()]
#borrowing data from another answer
print (df)
manual_raw_value
0 1232
2 .32
3 $299
4 *23
5 €21
6 /21