python 读取 csv 不正确
python reading in csv incorrectly
我正在使用 RStudio 并通过 read.csv
函数使用 R 语言将数据帧读入 RStudio,我没有遇到任何问题。
这是 R 的 dput
函数的输出,因此您可以看到数据帧。我不能为 python 做等效版本,因为我在 RStudio 中没有得到正确的版本。
structure(list(X = 1:32, car = c("Mazda RX4", "Mazda RX4 Wag",
"Datsun 710", "Hornet 4 Drive", "Hornet Sportabout", "Valiant",
"Duster 360", "Merc 240D", "Merc 230", "Merc 280", "Merc 280C",
"Merc 450SE", "Merc 450SL", "Merc 450SLC", "Cadillac Fleetwood",
"Lincoln Continental", "Chrysler Imperial", "Fiat 128", "Honda Civic",
"Toyota Corolla", "Toyota Corona", "Dodge Challenger", "AMC Javelin",
"Camaro Z28", "Pontiac Firebird", "Fiat X1-9", "Porsche 914-2",
"Lotus Europa", "Ford Pantera L", "Ferrari Dino", "Maserati Bora",
"Volvo 142E"), mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1, 14.3,
24.4, 22.8, 19.2, 17.8, 16.4, 17.3, 15.2, 10.4, 10.4, 14.7, 32.4,
30.4, 33.9, 21.5, 15.5, 15.2, 13.3, 19.2, 27.3, 26, 30.4, 15.8,
19.7, 15, 21.4), cyl = c(6L, 6L, 4L, 6L, 8L, 6L, 8L, 4L, 4L,
6L, 6L, 8L, 8L, 8L, 8L, 8L, 8L, 4L, 4L, 4L, 4L, 8L, 8L, 8L, 8L,
4L, 4L, 4L, 8L, 6L, 8L, 4L), disp = c(160, 160, 108, 258, 360,
225, 360, 146.7, 140.8, 167.6, 167.6, 275.8, 275.8, 275.8, 472,
460, 440, 78.7, 75.7, 71.1, 120.1, 318, 304, 350, 400, 79, 120.3,
95.1, 351, 145, 301, 121), hp = c(110L, 110L, 93L, 110L, 175L,
105L, 245L, 62L, 95L, 123L, 123L, 180L, 180L, 180L, 205L, 215L,
230L, 66L, 52L, 65L, 97L, 150L, 150L, 245L, 175L, 66L, 91L, 113L,
264L, 175L, 335L, 109L), drat = c(3.9, 3.9, 3.85, 3.08, 3.15,
2.76, 3.21, 3.69, 3.92, 3.92, 3.92, 3.07, 3.07, 3.07, 2.93, 3,
3.23, 4.08, 4.93, 4.22, 3.7, 2.76, 3.15, 3.73, 3.08, 4.08, 4.43,
3.77, 4.22, 3.62, 3.54, 4.11), wt = c(2.62, 2.875, 2.32, 3.215,
3.44, 3.46, 3.57, 3.19, 3.15, 3.44, 3.44, 4.07, 3.73, 3.78, 5.25,
5.424, 5.345, 2.2, 1.615, 1.835, 2.465, 3.52, 3.435, 3.84, 3.845,
1.935, 2.14, 1.513, 3.17, 2.77, 3.57, 2.78), qsec = c(16.46,
17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20, 22.9, 18.3, 18.9,
17.4, 17.6, 18, 17.98, 17.82, 17.42, 19.47, 18.52, 19.9, 20.01,
16.87, 17.3, 15.41, 17.05, 18.9, 16.7, 16.9, 14.5, 15.5, 14.6,
18.6), vs = c(0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L,
0L, 0L, 0L, 1L), am = c(1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L,
1L, 1L, 1L, 1L, 1L, 1L), gear = c(4L, 4L, 4L, 3L, 3L, 3L, 3L,
4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 3L, 3L, 3L,
3L, 3L, 4L, 5L, 5L, 5L, 5L, 5L, 4L), carb = c(4L, 4L, 1L, 1L,
2L, 1L, 4L, 2L, 2L, 4L, 4L, 3L, 3L, 3L, 4L, 4L, 4L, 1L, 2L, 1L,
1L, 2L, 2L, 4L, 2L, 1L, 2L, 2L, 4L, 6L, 8L, 2L)), class = "data.frame", row.names = c(NA,
-32L))
这里是 RStudio 控制台中代码和数据框的图像。
现在我正在使用 python 将相同的 csv 读取到 RStudio 中,除了这个不太好用。例如,wt
变量等一些变量丢失了。此外,它还在左侧创建了一个额外的列。我想这可能是因为 wt
变量是一个 dbl
但这不是原因,因为 mpg
也是一个 double.
我在 pd.read_csv 中做错了什么,没有正确读取 mtcars 数据帧?
你的Python代码没有错。只是数据框太“宽”,列太多,无法显示所有列。这就是为什么在 cyl
和 vs
之间有一个 '...'。
要解决此问题,请参阅 How do I expand the output display to see more columns of a Pandas DataFrame?
我认为您来自 RStudio,数据框未完全显示可能让您感到困扰。就我个人而言,我已经习惯了,大部分时间我都清楚自己目前有哪些数据列。
对于 Unnamed: 0
列,发生这种情况可能是因为上次将数据帧写入 csv 时,您还包含了不需要的索引。您的 mtcars.csv
可能看起来像这样:
,car,mpg,...
1,Mazda RX4,21.0,...
2,Mazda RX4 Wag,21.0,...
但最好是
car,mpg,...
Mazda RX4,21.0,...
Mazda RX4 Wag,21.0,...
因为你保存的索引可能没有意义。
你要么 (1) 下次不要将索引写入 csv(我不知道你是在使用 R 还是 Python),或者 (2) 写入 pd.read_csv('mtcars.csv', index=0)
这样您的 csv 中的第零列就会自动解析为索引。
数据读取成功。如果你说显示中的点是因为默认情况下 python pandas 只显示几列,你可以将其更改为
# it will show all columns
import pandas as pd
pd.set_option("display.max_columns", None)
对于列 'Unnamed: 0',这是一个索引,默认情况下保存时没有名称,您可以将其用作索引而不是具有以下参数的列:
pd.read_csv('mtcars.csv', index=0)
如果你想在阅读的同时忽略它,你可以使用:
pd.read_csv('mtcars.csv', index_col=False)
我正在使用 RStudio 并通过 read.csv
函数使用 R 语言将数据帧读入 RStudio,我没有遇到任何问题。
这是 R 的 dput
函数的输出,因此您可以看到数据帧。我不能为 python 做等效版本,因为我在 RStudio 中没有得到正确的版本。
structure(list(X = 1:32, car = c("Mazda RX4", "Mazda RX4 Wag",
"Datsun 710", "Hornet 4 Drive", "Hornet Sportabout", "Valiant",
"Duster 360", "Merc 240D", "Merc 230", "Merc 280", "Merc 280C",
"Merc 450SE", "Merc 450SL", "Merc 450SLC", "Cadillac Fleetwood",
"Lincoln Continental", "Chrysler Imperial", "Fiat 128", "Honda Civic",
"Toyota Corolla", "Toyota Corona", "Dodge Challenger", "AMC Javelin",
"Camaro Z28", "Pontiac Firebird", "Fiat X1-9", "Porsche 914-2",
"Lotus Europa", "Ford Pantera L", "Ferrari Dino", "Maserati Bora",
"Volvo 142E"), mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1, 14.3,
24.4, 22.8, 19.2, 17.8, 16.4, 17.3, 15.2, 10.4, 10.4, 14.7, 32.4,
30.4, 33.9, 21.5, 15.5, 15.2, 13.3, 19.2, 27.3, 26, 30.4, 15.8,
19.7, 15, 21.4), cyl = c(6L, 6L, 4L, 6L, 8L, 6L, 8L, 4L, 4L,
6L, 6L, 8L, 8L, 8L, 8L, 8L, 8L, 4L, 4L, 4L, 4L, 8L, 8L, 8L, 8L,
4L, 4L, 4L, 8L, 6L, 8L, 4L), disp = c(160, 160, 108, 258, 360,
225, 360, 146.7, 140.8, 167.6, 167.6, 275.8, 275.8, 275.8, 472,
460, 440, 78.7, 75.7, 71.1, 120.1, 318, 304, 350, 400, 79, 120.3,
95.1, 351, 145, 301, 121), hp = c(110L, 110L, 93L, 110L, 175L,
105L, 245L, 62L, 95L, 123L, 123L, 180L, 180L, 180L, 205L, 215L,
230L, 66L, 52L, 65L, 97L, 150L, 150L, 245L, 175L, 66L, 91L, 113L,
264L, 175L, 335L, 109L), drat = c(3.9, 3.9, 3.85, 3.08, 3.15,
2.76, 3.21, 3.69, 3.92, 3.92, 3.92, 3.07, 3.07, 3.07, 2.93, 3,
3.23, 4.08, 4.93, 4.22, 3.7, 2.76, 3.15, 3.73, 3.08, 4.08, 4.43,
3.77, 4.22, 3.62, 3.54, 4.11), wt = c(2.62, 2.875, 2.32, 3.215,
3.44, 3.46, 3.57, 3.19, 3.15, 3.44, 3.44, 4.07, 3.73, 3.78, 5.25,
5.424, 5.345, 2.2, 1.615, 1.835, 2.465, 3.52, 3.435, 3.84, 3.845,
1.935, 2.14, 1.513, 3.17, 2.77, 3.57, 2.78), qsec = c(16.46,
17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20, 22.9, 18.3, 18.9,
17.4, 17.6, 18, 17.98, 17.82, 17.42, 19.47, 18.52, 19.9, 20.01,
16.87, 17.3, 15.41, 17.05, 18.9, 16.7, 16.9, 14.5, 15.5, 14.6,
18.6), vs = c(0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L,
0L, 0L, 0L, 1L), am = c(1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L,
1L, 1L, 1L, 1L, 1L, 1L), gear = c(4L, 4L, 4L, 3L, 3L, 3L, 3L,
4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 3L, 3L, 3L,
3L, 3L, 4L, 5L, 5L, 5L, 5L, 5L, 4L), carb = c(4L, 4L, 1L, 1L,
2L, 1L, 4L, 2L, 2L, 4L, 4L, 3L, 3L, 3L, 4L, 4L, 4L, 1L, 2L, 1L,
1L, 2L, 2L, 4L, 2L, 1L, 2L, 2L, 4L, 6L, 8L, 2L)), class = "data.frame", row.names = c(NA,
-32L))
这里是 RStudio 控制台中代码和数据框的图像。
现在我正在使用 python 将相同的 csv 读取到 RStudio 中,除了这个不太好用。例如,wt
变量等一些变量丢失了。此外,它还在左侧创建了一个额外的列。我想这可能是因为 wt
变量是一个 dbl
但这不是原因,因为 mpg
也是一个 double.
我在 pd.read_csv 中做错了什么,没有正确读取 mtcars 数据帧?
你的Python代码没有错。只是数据框太“宽”,列太多,无法显示所有列。这就是为什么在 cyl
和 vs
之间有一个 '...'。
要解决此问题,请参阅 How do I expand the output display to see more columns of a Pandas DataFrame?
我认为您来自 RStudio,数据框未完全显示可能让您感到困扰。就我个人而言,我已经习惯了,大部分时间我都清楚自己目前有哪些数据列。
对于 Unnamed: 0
列,发生这种情况可能是因为上次将数据帧写入 csv 时,您还包含了不需要的索引。您的 mtcars.csv
可能看起来像这样:
,car,mpg,...
1,Mazda RX4,21.0,...
2,Mazda RX4 Wag,21.0,...
但最好是
car,mpg,...
Mazda RX4,21.0,...
Mazda RX4 Wag,21.0,...
因为你保存的索引可能没有意义。
你要么 (1) 下次不要将索引写入 csv(我不知道你是在使用 R 还是 Python),或者 (2) 写入 pd.read_csv('mtcars.csv', index=0)
这样您的 csv 中的第零列就会自动解析为索引。
数据读取成功。如果你说显示中的点是因为默认情况下 python pandas 只显示几列,你可以将其更改为
# it will show all columns
import pandas as pd
pd.set_option("display.max_columns", None)
对于列 'Unnamed: 0',这是一个索引,默认情况下保存时没有名称,您可以将其用作索引而不是具有以下参数的列:
pd.read_csv('mtcars.csv', index=0)
如果你想在阅读的同时忽略它,你可以使用:
pd.read_csv('mtcars.csv', index_col=False)