如何使用pandas read_csv从csv文件中正确读取数字、日期和字符串?

如何使用pandas read_csv从csv文件中正确读取数字、日期和字符串?,pandas,string,csv,types,numbers,Pandas,String,Csv,Types,Numbers,我有一个csv文件(data.csv),如下所示: DF = read_csv(pth).T DF 0 1 2 A 1.50 2020-1-1 John B 2.70 2020-1-2 Jeff C 2,481 2020-1-3 Ruben D 1,569 2020-1-4 Cath E 2.15 2020-1-5 James DF[0] = DF[0].str.replace(",&quo

我有一个csv文件(data.csv),如下所示:

DF = read_csv(pth).T
DF
       0         1       2
A   1.50  2020-1-1    John
B   2.70  2020-1-2    Jeff
C  2,481  2020-1-3   Ruben
D  1,569  2020-1-4    Cath
E   2.15  2020-1-5   James

DF[0] = DF[0].str.replace(",","").astype(float)
DF
         0         1       2
A     1.50  2020-1-1    John
B     2.70  2020-1-2    Jeff
C  2481.00  2020-1-3   Ruben
D  1569.00  2020-1-4    Cath
E     2.15  2020-1-5   James
df = read_csv(pth)
df.iloc[0,:] = df.iloc[0,:].str.replace(",", "").astype(float)
df
          A         B         C         D         E
0       1.5       2.7    2481.0    1569.0      2.15
1  2020-1-1  2020-1-2  2020-1-3  2020-1-4  2020-1-5
2      John      Jeff     Ruben      Cath     James
A、B、C、D、E
1.50,2.70,"2,481","1,569",2.15
2020-1-1,2020-1-2,2020-1-3,2020-1-4,2020-1-5
约翰、杰夫、鲁本、凯丝、詹姆斯
我试图使用df=pd.read_csv(“data.csv”,数千=”,”)我得到了df=

abcde
0       1.5      2.7    2,481    1,569     2.15
1  2020-1-1 2020-1-2 2020-1-3 2020-1-4 2020-1-5
约翰·杰夫·鲁本·凯思·詹姆斯
看起来不错,但实际上所有数字和日期都是df中的字符串,而Excel可以正确读取/转换它们


如何从csv文件中正确读取数字、日期和字符串?

处理此问题的首选方法是正常读取,采用转置并按列处理,如下所示:

DF = read_csv(pth).T
DF
       0         1       2
A   1.50  2020-1-1    John
B   2.70  2020-1-2    Jeff
C  2,481  2020-1-3   Ruben
D  1,569  2020-1-4    Cath
E   2.15  2020-1-5   James

DF[0] = DF[0].str.replace(",","").astype(float)
DF
         0         1       2
A     1.50  2020-1-1    John
B     2.70  2020-1-2    Jeff
C  2481.00  2020-1-3   Ruben
D  1569.00  2020-1-4    Cath
E     2.15  2020-1-5   James
df = read_csv(pth)
df.iloc[0,:] = df.iloc[0,:].str.replace(",", "").astype(float)
df
          A         B         C         D         E
0       1.5       2.7    2481.0    1569.0      2.15
1  2020-1-1  2020-1-2  2020-1-3  2020-1-4  2020-1-5
2      John      Jeff     Ruben      Cath     James
然后,您还拥有具有正确类型的系列(列):

DF[0]
A       1.50
B       2.70
C    2481.00
D    1569.00
E       2.15
Name: 0, dtype: float64  #<<<<< float
那你就可以这么做了

df.iloc[0,0] + df.iloc[0,2]
2482.5
但行本身仍然是一个对象而不是浮动,这在某些情况下可能是一个缺点:

df.iloc[0,:]
A       1.50
B       2.70
C    2481.00
D    1569.00
E       2.15
Name: 0, dtype: object   <<<< object
df.iloc[0,:]
A 1.50
B 2.70
C 2481.00
D 1569.00
E 2.15

名称:0,数据类型:对象一列通常只有一种类型,请检查您的列A是否包含日期和编号,这些日期和编号超过两种类型,但实际的csv文件是这样的,并且有许多这样的csv文件。谢谢!我认为这是在下一个Panda版本解决这个缺陷并与Excel一样工作之前解决问题的唯一方法