猿问

如何将包含 NUL ('\x00') 行的 csv 读入 pandas?

我有一组 csv 文件,其中日期和时间作为前两列(文件中没有标题)。这些文件在 Excel 中打开得很好,但是当我尝试使用 Pandas read_csv 将它们读入 Python 时,无论我是否尝试类型转换,都只返回第一个日期。


当我在记事本中打开时,它不仅仅是逗号分隔,而且在第 1 行之后的每一行之前都有大量空格;我已尝试skipinitialspace = True无济于事


我也尝试过各种类型转换,但都不起作用。我目前正在使用parse_dates = [['Date','Time']], infer_datetime_format = True, dayfirst = True


输出示例(无转换):


             0         1    2    3      4   ...    12    13   14   15   16

0      02/03/20  15:13:39  5.5  5.8  42.84  ...  30.0  79.0  0.0  0.0  0.0

1           NaN  15:13:49  5.5  5.8  42.84  ...  30.0  79.0  0.0  0.0  0.0

2           NaN  15:13:59  5.5  5.7  34.26  ...  30.0  79.0  0.0  0.0  0.0

3           NaN  15:14:09  5.5  5.7  34.26  ...  30.0  79.0  0.0  0.0  0.0

4           NaN  15:14:19  5.5  5.4  17.10  ...  30.0  79.0  0.0  0.0  0.0

...         ...       ...  ...  ...    ...  ...   ...   ...  ...  ...  ...

39451       NaN  01:14:27  5.5  8.4  60.00  ...  30.0  68.0  0.0  0.0  0.0

39452       NaN  01:14:37  5.5  8.4  60.00  ...  30.0  68.0  0.0  0.0  0.0

39453       NaN  01:14:47  5.5  8.4  60.00  ...  30.0  68.0  0.0  0.0  0.0

39454       NaN  01:14:57  5.5  8.4  60.00  ...  30.0  68.0  0.0  0.0  0.0

39455       NaN       NaN  NaN  NaN    NaN  ...   NaN   NaN  NaN  NaN  NaN

以及 parse_dates 等:


               Date_Time  pH1 SP pH  Ph1 PV pH  ...    1    2    3

0      02/03/20 15:13:39        5.5        5.8  ...  0.0  0.0  0.0

1           nan 15:13:49        5.5        5.8  ...  0.0  0.0  0.0

2           nan 15:13:59        5.5        5.7  ...  0.0  0.0  0.0

3           nan 15:14:09        5.5        5.7  ...  0.0  0.0  0.0

4           nan 15:14:19        5.5        5.4  ...  0.0  0.0  0.0


从记事本复制的数据(实际上每行前面有更多空格,但在这里不起作用):


数据来自67.csv


波斯汪
浏览 114回答 1
1回答

慕勒3428872

该文件充满了NUL, '\x00',需要将其删除。清理行后,用于pandas.DataFrame从 加载数据。dimport pandas as pdimport string  # to make column names# the issue is the the file is filled with NUL not whitespacedef 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)    # convert column 0 and 1 to a datetime    df['datetime'] = pd.to_datetime(df[0] + ' ' + df[1])    # drop column 0 and 1    df.drop(columns=[0, 1], inplace=True)    # set datetime as the index    df.set_index('datetime', inplace=True)    # convert data in columns to floats    df = df.astype('float')    # give character column names    df.columns = list(string.ascii_uppercase)[:len(df.columns)]        # reset the index    df.reset_index(inplace=True)        return df.copy()# call the functiondfs = list()filenames = ['67.csv']for filename in filenames:        dfs.append(import_file(filename))display(df)                       A    B      C    D    E      F     G     H      I     J     K     L    M    N    Odatetime                                                                                                 2020-02-03 15:13:39  5.5  5.8  42.84  7.2  6.8  10.63  60.0   0.0  300.0   1.0  30.0  79.0  0.0  0.0  0.02020-02-03 15:13:49  5.5  5.8  42.84  7.2  6.8  10.63  60.0   0.0  300.0   1.0  30.0  79.0  0.0  0.0  0.02020-02-03 15:13:59  5.5  5.7  34.26  7.2  6.8  10.63  60.0  22.3  300.0   1.0  30.0  79.0  0.0  0.0  0.02020-02-03 15:14:09  5.5  5.7  34.26  7.2  6.8  10.63  60.0  15.3  300.0  45.0  30.0  79.0  0.0  0.0  0.02020-02-03 15:14:19  5.5  5.4  17.10  7.2  6.8  10.63  60.0  50.2  300.0  86.0  30.0  79.0  0.0  0.0  0.0
随时随地看视频慕课网APP

相关分类

Python
我要回答