Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果数据类型不正确,如何验证数据类型列并获取名称列?_Python_Dataframe - Fatal编程技术网

Python 如果数据类型不正确,如何验证数据类型列并获取名称列?

Python 如果数据类型不正确,如何验证数据类型列并获取名称列?,python,dataframe,Python,Dataframe,我试图通过首先为每个列指定我想要的各自的数据类型来验证每个列的数据类型 我正在尝试使用从csv读取的数据 In[1]:import numpy as np import pandas as pd In[2]: d = {'ID': [14, 14, 14, 14, 14, 14, 14, 14, 14, np.nan], 'NAME': ['KWI', 'NED', 'RICK', 'NICH', 'DIONIC', 'RICHARD', 'ROCKY', 'CARLO

我试图通过首先为每个列指定我想要的各自的数据类型来验证每个列的数据类型

我正在尝试使用从csv读取的数据

In[1]:import numpy as np
      import pandas as pd
      
In[2]: d = {'ID': [14, 14, 14, 14, 14, 14, 14, 14, 14, np.nan], 'NAME': ['KWI', 'NED', 'RICK', 'NICH', 'DIONIC', 'RICHARD', 'ROCKY', 'CARLOS', 'SIDARTH%', ' '], 'ID_COUNTRY':[1, 2, 3,4/,5,6,7,8,9,10], 'COUNTRY':['MEXICO', 'ITALY', 'CANADA#', 'ENGLAND', 'GERMANY', 'UNITED STATES', 'JAPAN', 'SPAIN', 'BRAZIL', ''], 'ID_CITY':[10!, 20, 21, 31, 18, 27, 36, 86, 28, np.nan], 'CITY':['MX', 'IT', 'CA', 'ENG', 'GE', 'US', 'JP', 'SP', 'BZ', np.nan], 'STATUS': ['OK', 'OK', 'OK', 'OK', 'OK', 'NOT', 'OK', 'NOT', 'OK','']}
      df = pd.DataFrame(data=d)
      #df here is show it to get in context but I read it with 
      #df=pd.read_csv(r'data.csv', encoding='utf8', sep=',')
      df
Out[3]: df:
      ID        NAME      ID_COUNTRY     COUNTRY          ID_CITY       CITY     STATUS
0     14.0       KWI           1           MEXICO           10!          MX        OK
1     14.0       NED           2           ITALY            20.0         IT        OK
2     14.0       RICK          3           CANADA#          21.0         CA        OK
3     14.0       NICH          4/          ENGLAND          31.0         ENG       OK
4     14.0       DIONIC        5           GERMANY          18.0         GE        OK 
5     14.0       RICHARD       6           UNITED STATES    27.0         US        NOT
6     14.0       ROCKY         7           JAPAN            36.0         JP        OK
7     14.0       CARLOS        8           SPAIN            86.0         SP        NOT
8     14.0       SIDHART%      9           BRAZIL           28.0         BZ        OK
9     NaN                     10                            NaN         NaN
csv中的数据类型包括:

ID            float64
NAME           object
ID_COUNTRY     object
COUNTRY        object
ID_CITY        object
CITY           object
STATUS         object
dtype: object
我需要的是按名称或位置将列分开,如下所示:

a=df.iloc[:,[0,2,4]]
b=df.iloc[:,[1,3,5,6]]
dtypes
设置为
a.astype(“Int64”)
b.astype(“str”)
,但无法在某些列中查看此转换,因此我需要获取可以转换为所需
dtype
的列名。 例如:

ID_COUNTRY has invalid data.
ID_CITY has invalid data.
或者如果有任何可以转换的无效
字符串
,也会显示它,但在本例中不是这样,因为我相信几乎所有东西都可以转换为
字符串数据类型


我的想法是通过逐列迭代来尝试
for循环
,如果任何列中的值数据无法转换为所需的
数据类型
则提示出现该错误的名称列。

我尝试了您的代码。正如您所说的,由于数据无效,您无法设置列数据类型

对于
a.astype(“Int64”)
,最后一行具有
Nan
,它无法转换为
Int64
类型。 我的建议是删除此行,或者接受
float
作为数据类型

如果使用第一种解决方案:

a.dropna().astype('int')

另外,
ID\u COUNTRY

的代码中有一些输入错误,我尝试了你的代码。正如您所说的,由于数据无效,您无法设置列数据类型

对于
a.astype(“Int64”)
,最后一行具有
Nan
,它无法转换为
Int64
类型。 我的建议是删除此行,或者接受
float
作为数据类型

如果使用第一种解决方案:

a.dropna().astype('int')


注:
ID\u COUNTRY

的代码中有一些输入错误,
d={…}
行在4/上出现语法错误,还有一个!在那里。这是否来自CSV文件?是的,确实如此。它来自csv,但我想显示数据进行解释。但这就是问题所在。它不是有效的python,因此我无法构建与您类似的df。我可以手动“修复”这些问题,然后
a.astype(“int64”)
失败,出现
ValueError:当
a.astype(“int64”)
工作时,无法将非有限值(NA或inf)转换为整数。问题是,您没有给我们提供
a
的数据类型或初始化df的方法,因此我一直在寻找解决方案。如果csv中有一些坏数据,并且带有“4/”的列是一个字符串,您可以使用带有.replace的正则表达式进行修复,然后再将其设置为int64。根据是否要保留nan值,可以
a.fillna(0).astype(“int64”)
。。。如果把nan改为零是合理的,好的。我将添加@tdelaneyThat
d={…}
行在4/上引发语法错误,并且还有一个!在那里。这是否来自CSV文件?是的,确实如此。它来自csv,但我想显示数据进行解释。但这就是问题所在。它不是有效的python,因此我无法构建与您类似的df。我可以手动“修复”这些问题,然后
a.astype(“int64”)
失败,出现
ValueError:当
a.astype(“int64”)
工作时,无法将非有限值(NA或inf)转换为整数。问题是,您没有给我们提供
a
的数据类型或初始化df的方法,因此我一直在寻找解决方案。如果csv中有一些坏数据,并且带有“4/”的列是一个字符串,您可以使用带有.replace的正则表达式进行修复,然后再将其设置为int64。根据是否要保留nan值,可以
a.fillna(0).astype(“int64”)
。。。如果把nan改为零是合理的,好的。我将在你的评论中添加@tdelaneyI desagree,因为事实证明,如果你想转换为整数,是否存在
NaN
并不重要。如果删除
/
,您可以尝试,然后设置
a.astype(“Int64”)
。嗨,MetalJacket,我已经删除了
/
在我的实验中。将
Nan
转换为
int
时仍然存在错误。您可以尝试这样做:
pd.DataFrame([1,float('nan'))).astype('int')
。弹出错误:
ValueError:无法将非有限值(NA或inf)转换为整数
,这很奇怪。我只是删除错误并应用
df.iloc[:,[0,2,4]].astype(“Int64)”
并将它们转换为Int64。NAN显示为但在数据类型中显示为Int64.Em。。。真奇怪。我又试了一次。和
df.iloc[:,[0,2,4]].astype(“Int64)”
仍然会弹出错误
ValueError:无法将非有限值(NA或inf)转换为整数
。。。也许和熊猫版有关?我的是
'0.23.4'
很抱歉是:df.iloc[:,[0,2,4]].astype(“Int64”)。我有1.1.1版。也许是这样@Patrick LeeI对您的评论表示赞同,因为事实证明,如果要转换为整数,是否存在
NaN
,并不重要。如果删除
/
,您可以尝试,然后设置
a.astype(“Int64”)
。嗨,MetalJacket,我已经删除了
/
在我的实验中。将
Nan
转换为
int
时仍然存在错误。您可以尝试这样做:
pd.DataFrame([1,float('nan'))).astype('int')
。弹出错误:
ValueError:无法将非有限值(NA或inf)转换为整数
,这很奇怪。我只是删除错误并应用
df.iloc[:,[0,2,4]].astype(“Int64)”
并将它们转换为Int64。NAN显示为但在数据类型中显示为Int64.Em。。。真奇怪。我又试了一次。和
df.iloc[:,[0,2,4]].astype(“Int64)”
仍然会弹出错误
ValueError:无法将非有限值(NA或inf)转换为整数
。。。也许是吧