Python 将对象数据类型列转换为datafrane中的数字数据类型

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

试图回答这个问题时,我们遇到了与我的数据集不同的问题。当我将这个CSV文件导入dataframe时,每列都是对象类型,我们需要将仅仅是数字的列转换为实(数字)数据类型,而不是数字的列转换为字符串数据类型

有没有办法做到这一点

我尝试了下面文章中的代码,但没有成功

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似乎仍然是一个更好的选择。@SebMa
apply
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列,结果会有所不同。