Python 将对象数据类型列转换为datafrane中的数字数据类型
试图回答这个问题时,我们遇到了与我的数据集不同的问题。当我将这个CSV文件导入dataframe时,每列都是对象类型,我们需要将仅仅是数字的列转换为实(数字)数据类型,而不是数字的列转换为字符串数据类型 有没有办法做到这一点 我尝试了下面文章中的代码,但没有成功Python 将对象数据类型列转换为datafrane中的数字数据类型,python,pandas,Python,Pandas,试图回答这个问题时,我们遇到了与我的数据集不同的问题。当我将这个CSV文件导入dataframe时,每列都是对象类型,我们需要将仅仅是数字的列转换为实(数字)数据类型,而不是数字的列转换为字符串数据类型 有没有办法做到这一点 我尝试了下面文章中的代码,但没有成功 df = pd.DataFrame(a, columns=['col1','col2','col3']) 一如既往地感谢您的帮助选项1 使用pd.在apply df.apply(pd.to_numeric, errors='igno
df = pd.DataFrame(a, columns=['col1','col2','col3'])
一如既往地感谢您的帮助选项1使用
pd.在apply
df.apply(pd.to_numeric, errors='ignore')
选项2
在df.values.ravel
cvrtd = pd.to_numeric(df.values.ravel(), errors='coerce').reshape(-1, len(df.columns))
pd.DataFrame(np.where(np.isnan(cvrtd), df.values, cvrtd), df.index, df.columns)
注意
这些并不完全相同。对于某些包含混合值的列,选项2可以进行转换,而选项2将该列中的所有内容都保留为对象。查看您的文件,我会选择选项1
定时
df = pd.read_csv('HistorianDataSample/HistorianDataSample.csv', skiprows=[1, 2])
当其他数字列中有逗号或其他非数字字符时,通常会自动将所有列转换为对象类型。您可以尝试类似于df.replace(“,”,“”,regex=True).astype(np.int64)
的方法来删除字符并将数据转换为一些数字type@Jeff如何将pd.numeric
应用于整个数据帧?这就是我在这里要做的。此外,我可以先堆叠df
,但每列可能不同。如果堆叠序列中的任何元素未转换,则errors='ignore'
将停止转换。如果我使用errors='concurve'
它将nan
任何非数值的值。我只能考虑使用apply
分别对每个列进行操作。它仍将为每个列进行矢量化。use.ravel()和reshape@Jeff在这种情况下使用apply似乎仍然是一个更好的选择。@SebMaapply
将pd.to\u numeric
应用于数据帧的每一列。当您将数据帧传递给函数pd.to\u numeric(df)
时,它不知道该做什么。在上面的例子中,我使用ravel
强制数据帧是一维的,然后将结果重塑回与df
相同的维度。关键是,pd.\u数字(my\u数据帧)
预计不起作用pd.to_numeric
将处理一维事物的单态值<代码>局部放电到数字(局部放电系列(['1','2'])
,局部放电到数字('3')
两者都起作用。但是pd.to_numeric(['1','2',['3','4']])
没有。@SebMa,杰夫就是那个人!我怀疑他没有注意到我是在列的数据框架上应用的,他认为我是在系列的元素上应用的。对于一个系列,pd.series(['1','2']).apply(pd.to_numeric)
绝对是愚蠢的。在这个特定的例子中,当我们应用时,它以向量化的方式在每一列上使用。如果我们有100或1000列,结果会有所不同。