从包含特定列的非数字内容的csv中删除行

时间:2014-06-07 12:53:07

标签: python csv conditional

这是我的测试数据(采用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 个答案:

答案 0 :(得分:2)

您可以使用str.isdigit()来测试字符串是否只包含数字:

if line[1].isdigit():
    # all digits

演示:

>>> "1001".isdigit()
True
>>> "jsidofj882".isdigit()
False

答案 1 :(得分:2)

此解决方案使用Pandas库pandas library。我将按以下步骤进行操作

import pandas as pd
df = pd.read(your_file)

来自您提供的字符串:

导入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