Python 使用df.astype()时如何保持原始数据帧值?我需要为下面的示例提出一个值错误

Python 使用df.astype()时如何保持原始数据帧值?我需要为下面的示例提出一个值错误,python,pandas,dataframe,Python,Pandas,Dataframe,但是我想在B列的索引1处引发一个值错误。我不需要整数值。我想自动执行此操作(就像在所有列中循环)Panda的内置。中的astype()似乎没有您想要的“安全强制转换”方法 在numpy中,您可以使用 np.ndarray.astype(首选类型,casting='safe') 不幸的是,我没有一个很好的解决方案给你,但我会这样做 df = pd.DataFrame({ 'A': ['a', 'b', 'c', 'd', 'e'], 'B': [1, 2.5, 3, 4, 5], 'C':

但是我想在B列的索引1处引发一个值错误。我不需要整数值。我想自动执行此操作(就像在所有列中循环)

Panda的内置
。中的astype()
似乎没有您想要的“安全强制转换”方法

在numpy中,您可以使用
np.ndarray.astype(首选类型,casting='safe')

不幸的是,我没有一个很好的解决方案给你,但我会这样做

df = pd.DataFrame({ 
'A': ['a', 'b', 'c', 'd', 'e'], 
'B': [1, 2.5, 3, 4, 5], 
'C': ['abc', 'def', 'ghi', 'jkl', 'mno'] })

col_type = {'A':str, 'B':int, 'C':str}

df = df.astype(col_type)
df

Output is:  
    A   B   C
0   a   1   abc
1   b   2   def
2   c   3   ghi
3   d   4   jkl
4   e   5   mno

有人可能会给出比我更好的答案:)

如果要控制某些浮点值列只包含整数,只需在int转换后检查原始列与相同列之间的差异:

coltypes = [str,int,str]
colnames = ['a','b','c']
data_for_df =  [df.values[:,i].astype(coltypes[i], casting='safe') for i in range(len(df))]
df = pd.DataFrame(data_for_df,columns=colnames)
给出以下系列:

(df['B'] - df['B'].astype('int')) == 0
从那里,您可以引发异常

0     True
1    False
2     True
3     True
4     True
Name: B, dtype: bool
根据样本数据,它给出了预期的结果:

tmp = (df['B'] - df['B'].astype('int')) == 0
if not tmp.all():
    raise TypeError("Non int value at "+ ', '.join(df[(df['B'] - df['B'].astype('int')) != 0]
                     .index.astype(str)))

“保留原始数据帧值”如果需要,那么为什么要转换?我想强制执行列数据类型。如果任何列的值不正确,那么我想提出一个errorcasting选项,它不会告诉列名称问题所在。我需要对多个列执行此操作。这样我就可以验证所有列。你可以尝试将列表分解成for循环,然后在出现错误的地方抛出错误
TypeError: Non int value at 1