python-3.x - pandas read_csv 没有读取整个文件
问题描述
我有一个非常奇怪的问题,不知道如何解决。我正在使用 Ubuntu 18.04.2 和 Python 3.7.3 64 位,并使用 VScode 作为编辑器。我正在从数据库中读取数据并使用 csv.writer 将其写入 csv 文件
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)
对于我这样做的 6 个位置中的 5 个,一切正常,组合数据集的长度与两个单独的数据集相同。但是对于一个位置 pd.read_csv 似乎无法正确读取 csv 文件。我检查了问题是否已经在数据库读数中,但那里一切正常,我可以用 sublime 打开两个文件,它们的长度相同,但是当我用 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]
对我来说,数据中没有明显的原因为什么它应该在读取整个文件时出现问题,显然没有,考虑到有时它会读取整个文件,有时不会。
我真的对此一无所知。你知道如何应对这个问题吗?可能是什么问题?非常感谢您的帮助!维罗妮卡
解决方案
我在使用不同的应用程序时遇到了完全相同的问题,并且也不明白出了什么问题,因为有时它有效,有时却无效。
在 for 循环中,我提取了在同一个文件中创建的数据框的最后两行。有时,提取的行根本不是最后两个,但大多数时候它工作正常。我猜程序在编写过程完成之前就开始提取最后两行。
我将脚本暂停了半秒钟,以确保编写过程完成:
import time
time.sleep(0.5)
但是,我认为这不是一个非常优雅的解决方案,因为如果计算机速度较慢的人使用该脚本可能还不够。
Vroni,你最后是怎么解决这个问题的,有没有办法定义一个特定的进程不能与其他任务并行处理。我没有在我的程序中定义任何关于并行处理的东西,所以我认为如果这是它自动完成的原因。
推荐阅读
- excel - 使用 SMTP 配置发送自动 Outlook 电子邮件时指定发件人
- python - 删除将 json 数组转换为元组后出现的逗号
- ruby-on-rails - Rails 高级约束将变量从路由传递到控制器
- javascript - 为什么多个异常会破坏 Node v12 的异步堆栈跟踪?
- python - 在 python 中使用 csv 创建字典的问题
- react-native - react-native-navigation :如何将标题隐藏到所有屏幕
- android - Kotlin - Retrofit 接收带有对象的 json,但使用协程该对象始终显示为 NULL
- google-chrome - 通过 Chrome 将网页固定到 Windows 任务栏时如何提供正确的图标
- node.js - 如何避免通过firebase实时数据库循环的嵌套promise
- wordpress - 我需要帮助生成基于用户 ID 的自定义 URL