Панды read_csv не читают весь файл - PullRequest
0 голосов
/ 05 ноября 2019

У меня действительно странная проблема, и я не знаю, как ее решить. Я использую Ubuntu 18.04.2 вместе с 64-битным Python 3.7.3 и использую VScode в качестве редактора. Я читаю данные из базы данных и записываю их в файл csv с помощью csv.writer

import pandas as pd
import csv
with open(raw_path + station + ".csv", "w+") as f:
        file = csv.writer(f)
        # Write header into csv
        colnames = [par for par in param]
        file.writerow(colnames)
        # Write data into csv
        for row in data:
            file.writerow(row)

Это прекрасно работает, он предоставляет файл .csv со всеми данными, которые я считал из базы данных дотекущий временной шаг. Однако на следующем рабочем этапе я должен прочитать эти данные в фрейме данных pandas и объединить его с другим фреймом данных pandas. Я читаю файлы следующим образом:

data1 = pd.read_csv(raw_path + file1, sep=',')
data2 = pd.read_csv(raw_path + file2, sep=',')

И затем объединяю данные следующим образом:

comb_data = pd.merge(data1, data2, on="datumsec", how="left").fillna(value=-999)

Для 5 из 6 мест, где я это делаю, все отлично работает,объединенный набор данных имеет ту же длину, что и два отдельных. Однако в одном месте pd.read_csv, похоже, неправильно читает файлы csv. Я проверил, есть ли проблема уже в считывании базы данных, но там все в порядке, я могу открыть оба файла с возвышенным, и они имеют одинаковую длину, однако, когда я читаю их с помощью pandas.read_csv, один показывает меньше строк. Самое приятное, что эта проблема выглядит совершенно случайной. Иногда это работает и читает весь файл, иногда нет. И это происходит в разных местах файла. Иногда это останавливается после ок. 20000 записей, иногда 45000, иногда где-то еще ... просто совершенно случайно.

Вот краткий обзор моих тестовых результатов, когда я печатаю все длины файлов

print(len(data1)): 57105 
print(len(data2)): 57105

оба значениянепосредственно после считывания из базы данных, перед тем, как записать его в любом месте. После сохранения данных в формате csv, как описано выше, и открытия их в excel или sublime или в любом другом виде, я могу подтвердить, что данные содержат 57105 строк. Все там, где это должно быть.

Однако, если я пытаюсь прочитать данные как с pd.read_csv

print(len(data1)): 48612 
print(len(data2)): 57105

оба значения после чтения данных из файла CSV

data1 48612
         datumsec  tl   rf  ff   dd  ffx
0      1538352000  46   81  75  288   89
1      1538352600  47   79  78  284   93
2      1538353200  45   82  79  282   93
3      1538353800  44   84  71  284   91
4      1538354400  43   86  77  288   96
5      1538355000  43   85  78  289   91
6      1538355600  46   80  79  286   84
7      1538356200  51   72  68  285   83
8      1538356800  52   71  68  281   73
9      1538357400  48   75  68  276   80
10     1538358000  45   78  62  271   76
11     1538358600  42   82  66  273   76
12     1538359200  43   81  70  274   78
13     1538359800  44   80  68  275   78
14     1538360400  45   78  66  279   72
15     1538361000  45   78  67  282   73
16     1538361600  43   79  63  275   71
17     1538362200  43   81  69  280   74
18     1538362800  42   80  70  281   76
19     1538363400  43   78  69  285   77
20     1538364000  43   78  71  285   77
21     1538364600  44   75  61  288   71
22     1538365200  45   73  56  290   62
23     1538365800  45   72  44  297   57
24     1538366400  44   73  51  286   57
25     1538367000  43   76  61  281   70
26     1538367600  40   79  66  284   73
27     1538368200  39   78  70  291   76
28     1538368800  38   80  71  287   81
29     1538369400  36   81  74  285   81
...           ...  ..  ...  ..  ...  ...
48582  1567738800   7  100   0  210    0
48583  1567739400   6  100   0  210    0
48584  1567740000   5  100   0  210    0
48585  1567740600   6  100   0  210    0
48586  1567741200   4  100   0  210    0
48587  1567741800   4  100   0  210    0
48588  1567742400   5  100   0  210    0
48589  1567743000   4  100   0  210    0
48590  1567743600   4  100   0  210    0
48591  1567744200   4  100   0  209    0
48592  1567744800   4  100   0  209    0
48593  1567745400   5  100   0  210    0
48594  1567746000   6  100   0  210    0
48595  1567746600   5  100   0  210    0
48596  1567747200   5  100   0  210    0
48597  1567747800   5  100   0  210    0
48598  1567748400   5  100   0  210    0
48599  1567749000   6  100   0  210    0
48600  1567749600   6  100   0  210    0
48601  1567750200   5  100   0  210    0
48602  1567750800   4  100   0  210    0
48603  1567751400   5  100   0  210    0
48604  1567752000   6  100   0  210    0
48605  1567752600   7  100   0  210    0
48606  1567753200   6  100   0  210    0
48607  1567753800   5  100   0  210    0
48608  1567754400   6  100   0  210    0
48609  1567755000   7  100   0  210    0
48610  1567755600   7  100   0  210    0
48611  1567756200   7  100   0  210    0
[48612 rows x 6 columns]
         datumsec   tl   rf  schnee  ival6
0      1538352000  115   61      25    107
1      1538352600  115   61      25    107
2      1538353200  115   61      25    107
3      1538353800  115   61      25    107
4      1538354400  115   61      25    107
5      1538355000  115   61      25    107
6      1538355600  115   61      25    107
7      1538356200  115   61      25    107
8      1538356800  115   61      25    107
9      1538357400  115   61      25    107
10     1538358000  115   61      25    107
11     1538358600  115   61      25    107
12     1538359200  115   61      25    107
13     1538359800  115   61      25    107
14     1538360400  115   61      25    107
15     1538361000  115   61      25    107
16     1538361600  115   61      25    107
17     1538362200  115   61      25    107
18     1538362800  115   61      25    107
19     1538363400  115   61      25    107
20     1538364000  115   61      25    107
21     1538364600  115   61      25    107
22     1538365200  115   61      25    107
23     1538365800  115   61      25    107
24     1538366400  115   61      25    107
25     1538367000  115   61      25    107
26     1538367600  115   61      25    107
27     1538368200  115   61      25    107
28     1538368800  115   61      25    107
29     1538369400  115   61      25    107
...           ...  ...  ...     ...    ...
57075  1572947400  -23  100      -2   -999
57076  1572948000  -23  100      -2   -999
57077  1572948600  -22  100      -2   -999
57078  1572949200  -23  100      -2   -999
57079  1572949800  -24  100      -2   -999
57080  1572950400  -23  100      -2   -999
57081  1572951000  -21  100      -1   -999
57082  1572951600  -21  100      -1   -999
57083  1572952200  -23  100      -1   -999
57084  1572952800  -23  100      -1   -999
57085  1572953400  -22  100      -1   -999
57086  1572954000  -23  100      -1   -999
57087  1572954600  -22  100      -1   -999
57088  1572955200  -24  100       0   -999
57089  1572955800  -24  100       0   -999
57090  1572956400  -25  100       0   -999
57091  1572957000  -26  100      -1   -999
57092  1572957600  -26  100      -1   -999
57093  1572958200  -27  100      -1   -999
57094  1572958800  -25  100      -1   -999
57095  1572959400  -27  100      -1   -999
57096  1572960000  -29  100      -1   -999
57097  1572960600  -28  100      -1   -999
57098  1572961200  -28  100      -1   -999
57099  1572961800  -27  100      -1   -999
57100  1572962400  -29  100      -2   -999
57101  1572963000  -29  100      -2   -999
57102  1572963600  -29  100      -2   -999
57103  1572964200  -30  100      -2   -999
57104  1572964800  -28  100      -2   -999
[57105 rows x 5 columns]

Для меня нет очевидной причины в данных, почему у него должны быть проблемы с чтением всего файла, и, очевидно, их нет, учитывая, что иногда он читает весь файл, а иногда нет.

Я действительно ничего не понимаю об этом. У вас есть идеи, как справиться с этим и в чем может быть проблема? Большое спасибо за помощь! Вероника

1 Ответ

0 голосов
/ 06 ноября 2019

Я наконец-то решил свою проблему, и, как и ожидалось, ее не было в самом файле. Я использую мультипроцессы для запуска именованных функций и некоторых других вещей параллельно. Чтение из базы данных + запись в файл CSV и чтение из файла CSV выполняются в двух разных процессах. Поэтому второй процесс (чтение из csv) не знал, что файл csv все еще записывался, и читал только то, что уже было доступно в файле csv. Поскольку файл был открыт другим процессом, он не выдавал исключение при открытии. Я думал, что уже позаботился об этом, но, очевидно, недостаточно тщательно, исключая все возможные случаи.

В любом случае, спасибо всем за попытку помочь мне разгадать эту тайну.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...