Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python将int转换为float的问题_Python_Python 3.x_Pandas - Fatal编程技术网

python将int转换为float的问题

python将int转换为float的问题,python,python-3.x,pandas,Python,Python 3.x,Pandas,我使用pandas read_csv提取数据并重新格式化。例如,“HBE日期”一栏中的“2018年10月28日”将重新格式化为“eHome 10/2018” 它主要起作用,但我得到了重新格式化的值,如“ehome 1.0/2015.0” 此时,如果我打印(键入(eMonth))它返回为“int”。如果我打印eYears列表,我会得到像2013、2014、2015等值 但是我将列表分配给数据框中的列 eHomeHBEdata.insert(0,'workshop Month',eMonths) e

我使用pandas read_csv提取数据并重新格式化。例如,“HBE日期”一栏中的“2018年10月28日”将重新格式化为“eHome 10/2018”

它主要起作用,但我得到了重新格式化的值,如“ehome 1.0/2015.0”

此时,如果我打印(键入(eMonth))它返回为“int”。如果我打印eYears列表,我会得到像2013、2014、2015等值

但是我将列表分配给数据框中的列

eHomeHBEdata.insert(0,'workshop Month',eMonths)
eHomeHBEdata.insert(1,'workshop Year',eYears)
。之后,print(eHomeHBedata[‘车间月’])返回值,如2013.0、2014.0、2015.0。那是浮点数,对吗

当我尝试使用下面的代码时,我得到了上面提到的错误格式

eHomeHBEdata['course session'] = "ehome " + eHomeHBEdata['workshop Month'].astype(str) + "/" + eHomeHBEdata['workshop Year'].astype(str)
eHomeHBEdata['start'] = eHomeHBEdata['workshop Month'].astype(str) + "/1/" + eHomeHBEdata['workshop Year'].astype(str) + " 12:00 PM"
有人能解释一下这里发生了什么并帮我解决吗?

解决方案 要将日期列转换(重新格式化)为
MM/YYYY
,只需执行以下操作:

df[“您的列名称”].dt.strftime(“%m/%Y”)
有关两种不同的用例,请参见第A节第B节

A.例子 我用一个名为:
Date
的列为这个插图创建了一些虚拟数据。要将此列重新格式化为
MM/YYYY
我使用的是
df.Dates.dt.strftime(“%m/%Y”)
,它相当于
df[“Dates”].dt.strftime(“%m/%Y”)

将熊猫作为pd导入
##虚拟数据
日期=pd.日期\u范围(开始日期为2020/07/01',结束日期为2020/07/07',频率为'D')
df=pd.DataFrame(日期,列=['dates']))
#解决方案
df['Reformatted_Dates']=df.Dates.dt.strftime(“%m/%Y”)
打印(df)
##输出:
#重新格式化的日期
# 0 2020-07-01           07/2020
# 1 2020-07-02           07/2020
# 2 2020-07-03           07/2020
# 3 2020-07-04           07/2020
# 4 2020-07-05           07/2020
# 5 2020-07-06           07/2020
# 6 2020-07-07           07/2020
B.如果您的输入数据采用以下格式 在本例中,首先可以使用列上的
.astype('datetime64[ns,US/Eastern]')
转换日期。这使您可以对列应用特定于日期时间的方法。现在尝试运行
df.Dates.astype('datetime64[ns,US/Eastern]')).dt.to_period(freq='M')

##虚拟数据
日期=[
'10/2018', 
'11/2018', 
'8/2019', 
'5/2020',
]
df=pd.DataFrame(日期,列=['dates']))
打印(df.Dates.dtype)
打印(df)
##将列转换为datetime并重新格式化
df['Dates']=df.Dates.astype('datetime64[ns,美国/东部])#.dt.strftime('%m/%Y'))
打印(df.Dates.dtype)
C.避免使用
for循环
试试这个。可以在列上使用熊猫的内置矢量化,而不是在每行上循环。我已经在列中使用了
.dt.month
.dt.year
来获取月份和年份,即
int

eHomeHBEdata['HBE date']=pd.to_datetime(eHomeHBEdata['Course Completed'])
eHomeDates=eHomeHBEdata['HBE date']#应为datetime.datetime格式
##这就是我改变的
>>>eMonths=eHomeDates.dt.month
>>>eYears=eHomeDates.dt.年
eHomeHBEdata.插入(0,'车间月',月数)
eHomeHBEdata.插入(1,“车间年”,eYears)

使用此方法检查数据框pandas.dataframe.dtypes中每列的数据类型可能是float,如果插入int值,则会将其转换为float“workshop Month”is type series。创建它的eMonths对象是一个列表。进入列表的单个eMonth对象的类型为int。但是,当“车间月份”被放入df列时,它看起来像一个浮点。@NWWPA这能解决问题吗?如果您有任何问题,请告诉我。谢谢您的努力。您在A部分中的解决方案是解决其中一个问题,但不是全部问题。eHomeHBEdata“course session”值是固定的,但是eHomeHBEdata['start']仍然需要for循环提取的月份和日期数值。e、 g.输入日期为'11/5/2020'将为'start'创建输出值'11/1/2020'。原因与我将加载输出CSV的CRM软件有关。@NWWPA您能否将“输入数据”和“预期输出数据”作为示例共享?现在我还不清楚你到底在寻找什么。在上面的for循环之后,eMonths和eYears列表中的对象是int类型。在将它们分配到列之后,它们以某种方式转换为float类型:
eHomeHBEdata.insert(0,'workshop Month',eMonths)eHomeHBEdata.insert(1,'workshop Year',eYears)
I获得“10.0”NWWPA请检查我的解决方案中的C部分,而不是“10”和“2020.0”而不是“2020”。
eHomeHBEdata['course session'] = "ehome " + eHomeHBEdata['workshop Month'].astype(str) + "/" + eHomeHBEdata['workshop Year'].astype(str)
eHomeHBEdata['start'] = eHomeHBEdata['workshop Month'].astype(str) + "/1/" + eHomeHBEdata['workshop Year'].astype(str) + " 12:00 PM"