Pandas 数据框无法将列数据类型从对象转换为字符串以进行进一步操作
Posted
技术标签:
【中文标题】Pandas 数据框无法将列数据类型从对象转换为字符串以进行进一步操作【英文标题】:Pandas dataframe cannot convert columns datatype from object to string for further operation 【发布时间】:2018-01-26 14:55:24 【问题描述】:这是我的工作代码,它正在从网站下载一个 excel 文件。大约需要 40 秒。
运行此代码后,您会注意到 Key1、Key2 和 Key3 列是对象 dtype。我清理了数据框,使 key1 和 key2 只有字母数字值。熊猫仍然将其保留为对象 dtype。我需要连接(如在 MS Excel 中)Key1 和 Key2 以创建一个名为 deviceid 的单独列。我意识到我不能加入这两列,因为它们是对象 dtypes。如何转换为字符串以便创建新列?
import pandas as pd
import urllib.request
import time
start=time.time()
url="https://www.misoenergy.org/Library/Repository/Market%20Reports/20170816_da_bcsf.xls"
cnstsfxls = urllib.request.urlopen(url)
xlsf = pd.ExcelFile(cnstsfxls)
dfsf = xlsf.parse("Sheet1",skiprows=3)
dfsf.drop(dfsf.index[len(dfsf)-1],inplace=True)
dfsf.drop(dfsf[dfsf['Device Type'] == 'UN'].index, inplace=True)
dfsf.drop(dfsf[dfsf['Device Type'] == 'UNKNOWN'].index, inplace=True)
dfsf.drop(['Constraint Name','Contingency Name', 'Constraint Type','Flowgate Name'],axis=1, inplace=True)
end=time.time()
print("The entire process took - ", end-start, " seconds.")
【问题讨论】:
你试过了吗:df[['key1', 'key2', 'key3']].astype(str)
?
我试过这个....a=dfsf.Key1.astype(str) 并且仍然保留 a as 对象。不明白为什么它持有对象类型。
您的列中可能有混合类型...
有办法检查吗?
或者您知道如何遍历 Key1 的每个单元格并尝试转换为 str 吗?
【参考方案1】:
我可能在这里错过了重点。但是,如果您要做的是构造一个列,例如,deviceid = RCH417
、Key1 = RCH
和 Key2 = 417
,那么即使两个列都是 object 类型,dfsf['deviceid'] = dfsf['Key1'] + dfsf['Key2']
也可以正常工作。
试试这个:
# Check value types
dfsf.dtypes
# Add your desired column
dfsf['deviceid'] = dfsf['Key1'] + dfsf['Key2']
# Inspect columns of interest
keep = ['Key1', 'Key2', 'deviceid']
df_keys = dfsf[keep]
print(df_keys.dtypes)
print(df_keys.head())
【讨论】:
这是您要找的吗?以上是关于Pandas 数据框无法将列数据类型从对象转换为字符串以进行进一步操作的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Pandas 数据框中的字符串转换为“日期”数据类型?