某些列使用Pandas形中断csv阅读,并使整个输出表填充NA

e37o9pze  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(101)

我有一个csv导出文件,我不能事先更改,我试图用Python(Pandas)读取它,但我通常得到的df与“未命名”列和“NA”,而不是所有的值。
csv文件的列如下所示:列Recipient 1Recipient 2完全为空。
pd.read_csv(f, sep=';', decimal=',', encoding='cp1252')阅读它,得到:

N  Unnamed: 1  Unnamed: 2  ...  Unnamed: 5  Unnamed: 6  Unnamed: 7
0   NaN         NaN         NaN  ...         NaN         NaN         NaN
1   NaN         NaN         NaN  ...         NaN         NaN         NaN
2   NaN         NaN         NaN  ...         NaN         NaN         NaN
3   NaN         NaN         NaN  ...         NaN         NaN         NaN
4   NaN         NaN         NaN  ...         NaN         NaN         NaN

(使用的编码和分隔符正确)。我已确定列Recipient 1Recipient 2会导致问题。因为:
1.如果我把它们去掉,它就起作用了;
1.如果我用值填充它们。它就工作了
1.如果我将它们保留为空,但手动重命名为其他名称(例如,RecipientRecipientq),则可以正常工作
usecolumns方法不起作用,因为它不能识别错误文件中的列名。
问题是,我应该做些什么来确保正确加载文件呢?我不需要保留这些列,但我需要以某种方式编辑它们以正确加载。
编辑:header=none, skiprows=1将产生类似的:

0   1   2   3   4   5   6   7
0   NaN NaN NaN NaN NaN NaN NaN NaN
1   NaN NaN NaN NaN NaN NaN NaN NaN
2   NaN NaN NaN NaN NaN NaN NaN NaN
r1zhe5dt

r1zhe5dt1#

在此找到答案:https://stackoverflow.com/a/64052349/5874325
原来是NULL字符问题。根据答案修改函数:

def import_file(filename):
    # open the file and clean it
    with open(filename) as f:
        d = list(f.readlines())

        # replace NUL, strip whitespace from the end of the strings, split each string into a list
        d = [v.replace('\x00', '').strip().split(';') for v in d]

        # remove some empty rows
        d = [v for v in d if len(v) > 2]

    # load the file with pandas
    df = pd.DataFrame(d)
    
    return df

相关问题