删除特定列中含非数字内容的CSV行
这是我的测试数据(格式是csv):
"id","user_id","value"
"1","1001","111"
"2","1002","222"
"3","h82kn9;2&3","333"
"4","jsidofj882","444"
我的目标是去掉所有在user_id
这一列中包含字符串的行。我想知道怎么测试每一行对应某一列的内容是不是字符串。这个字符串可以是任何字符串。
我已经开始写代码了,但老实说,我不知道该如何处理if
的部分。
import csv
reader = csv.reader(open("file.csv", "rb"), delimiter=",", quotechar='"')
for line in reader:
if ##column 'user_id' is not a string##
print line
任何提示都会很有帮助。
2 个回答
2
这个解决方案使用了Pandas库,大家可以在这里找到它的文档:pandas library。接下来我会这样做:
import pandas as pd
df = pd.read(your_file)
首先,从你提供的字符串开始:
import StringIO
df = pd.read_csv(StringIO.StringIO(your_csf_file_as_a_string))
这里的df就是一个数据框,里面包含了你所有的数据:
id user_id value
0 1 1001 111
1 2 1002 222
2 3 h82kn9;2&3 333
3 4 jsidofj882 444
接下来是过滤的部分,我们选择感兴趣的列(user_id),并通过选择只包含数字的字符串来进行过滤:
filtered_df = df[df['user_id'].apply(lambda x: str(x).isdigit())]
filtered_df现在只包含前两行,正如我们预期的那样:
id user_id value
0 1 1001 111
1 2 1002 222
2
你可以使用 str.isdigit()
来检查一个字符串是否只包含数字:
if line[1].isdigit():
# all digits
示例:
>>> "1001".isdigit()
True
>>> "jsidofj882".isdigit()
False