在Python中创建一个包含csvfile中指定列数据的列表

时间:2017-09-20 15:03:13

标签: python list pandas

我有一个我读过的csv文件:

with io.open(script, 'r', encoding='utf-8-sig') as csvfile:
    entireFile = csv.reader(csvfile)

我想循环遍历整个文件'并将特定列复制到新列表。我有另一个列表,我们称之为“wantedColumnsList'”,其中包含我要复制的列标题的名称,如下所示:

wantedColumnsList = ["Column2", "Column5", "Column9"]

重申一下,我想循环遍历整个文件'并将所有数据复制到新列表中,但只包含在wantedColumnsList中列出的列中包含的数据。 我想这样做的原因(只是为了提供一些上下文)是为了让我可以循环遍历新列表并搜索任何空值。如果我找到一个空值,我希望能够打印出包含null的列名。 基本上我是在创建一个读取文件的脚本,并检查某些列是否包含空值。 谢谢!

3 个答案:

答案 0 :(得分:1)

如果您对pandas开放,可以使用此代码过滤掉所需的列:

import pandas as pd

df = pd.read_csv('your_file.csv', encoding='utf-8-sig')
wantedColumnsList = ["Column2", "Column5", "Column9"]

df = df[wantedColumnsList]

如果您想将其转储到csv,请使用:

df.to_csv('your_new_file.csv', encoding='utf-8-sig')

修改 并查找包含nan的列:

df.columns[df.isnull().any()].tolist()

使用nan查找特定行:

df[df.isnull().any(axis=1)]

答案 1 :(得分:0)

使用str.split(splitting_symbol)将您的csv拆分为2D列表并进行迭代。

答案 2 :(得分:0)

您不需要创建第二个列表来检查空值。只需遍历csv.DictReader,检查所需字段是否为空值,如果找到null,则打印字段名称。

import csv

wanted_fields = ("Column2", "Column5", "Column9")

with open('data.csv') as f:
    for line_no, row in enumerate(csv.DictReader(f), 2):
        null_fields = [field for field in wanted_fields if row[field] == '']
        if null_fields:
            print('Line {} contains null in column(s) {}'.format(line_no, ', '.join(null_fields)))

<强>演示

样本数据:

Column1,Column2,Column3,Column4,Column5,Column6,Column7,Column8,Column9,Column10
1,2,3,4,5,6,7,8,9,10
1,,3,4,5,6,7,8,9,10
1,,3,4,,6,7,8,9,10
1,,3,4,,6,7,8,,10
1,2,3,4,,6,7,8,9,10
,,,,,,,,,

输出

Line 3 contains null in column(s) Column2
Line 4 contains null in column(s) Column2, Column5
Line 5 contains null in column(s) Column2, Column5, Column9
Line 6 contains null in column(s) Column5
Line 7 contains null in column(s) Column2, Column5, Column9