Python 使用df.astype()时如何保持原始数据帧值?我需要为下面的示例提出一个值错误
但是我想在B列的索引1处引发一个值错误。我不需要整数值。我想自动执行此操作(就像在所有列中循环)Panda的内置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':
。中的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