删除特定列中含非数字内容的CSV行

0 投票
2 回答
1782 浏览
提问于 2025-04-18 08:58

这是我的测试数据(格式是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

撰写回答