Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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 在我没有要求时,将列的数据类型从float更改为integer_Python_Pandas_Dataframe - Fatal编程技术网

Python 在我没有要求时,将列的数据类型从float更改为integer

Python 在我没有要求时,将列的数据类型从float更改为integer,python,pandas,dataframe,Python,Pandas,Dataframe,我对这里发生的事情感到有点困惑。我有一个方法,它从一个数据帧中获取值并创建一个新的数据帧。有些列仅为字符串、浮点或整数。该方法可以很好地工作,并在数据类型不变的情况下创建新的dataframe,除了一列之外,由于某种原因,它只给出数字的int部分。我不明白为什么要特别写那篇专栏文章。我的方法如下所示: def assignPropsToFinList(self,gensodLays): updtZbotmDf=pd.DataFrame({"ZBOTM (m)":gen

我对这里发生的事情感到有点困惑。我有一个方法,它从一个数据帧中获取值并创建一个新的数据帧。有些列仅为字符串、浮点或整数。该方法可以很好地工作,并在数据类型不变的情况下创建新的dataframe,除了一列之外,由于某种原因,它只给出数字的int部分。我不明白为什么要特别写那篇专栏文章。我的方法如下所示:

def assignPropsToFinList(self,gensodLays):
    updtZbotmDf=pd.DataFrame({"ZBOTM (m)":gensodLays})
    columnTitle = self.soilDf.columns.tolist()
    for i in range(len(columnTitle)):
        if i == 0:
            pass
        else:
            updtZbotmDf[columnTitle[i]] = 0
            for j in range(len(gensodLays)):
                for k in range(len(self.soilDf)):
                    if j == 0 and k == 0:
                        updtZbotmDf.loc[:, (columnTitle[i])][j] = self.soilDf.loc[:, (columnTitle[i])][k]
                    elif updtZbotmDf["ZBOTM (m)"][j] == self.soilDf["Penetration (m)"][k] and updtZbotmDf["ZBOTM (m)"][j] == \
                            self.soilDf["Penetration (m)"][k - 1]:                                                   # here I am sorting the points that where onee layer ends and other starts and both have same depth value
                        updtZbotmDf.loc[:, (columnTitle[i])][j] = self.soilDf.loc[:, (columnTitle[i])][k - 1]
                    elif updtZbotmDf["ZBOTM (m)"][j] == self.soilDf["Penetration (m)"][k] and updtZbotmDf["ZBOTM (m)"][j] != \
                            self.soilDf["Penetration (m)"][k - 1]:
                        updtZbotmDf.loc[:, (columnTitle[i])][j] = self.soilDf.loc[:, (columnTitle[i])][k]
                    elif self.soilDf["Penetration (m)"][k] > updtZbotmDf["ZBOTM (m)"][j] > self.soilDf["Penetration (m)"][k - 1]:
                        updtZbotmDf.loc[:, (columnTitle[i])][j] = self.soilDf.loc[:, (columnTitle[i])][k]
    return updtZbotmDf

由于某种原因将值从float更改为int的列的唯一特殊之处是,它同时包含int和float,并且在只包含字符串值的列的右上方也包含它们

updtZbotmDf=pd.DataFrame({"ZBOTM (m)":gensodLays},dtype=str)

你让我们努力工作来帮助你。你能把你的代码精简到一个最小的例子来演示这个问题吗?我想代码已经尽可能地精简了,但只是简单地解释一下我的问题是什么:例如,我有第一列-当我创建新的数据帧数据类型时,它有浮动保持不变,我有第二列是字符串,当我用相同的列字符串创建新的dataframe时,仍然是字符串,我有第三列,它是浮点和整数的混合输入,当我创建新dataframe时,它变成只有int(这是我没有得到的部分)。最后,在这之后,我有一堆其他的列,其中初始数据帧有float,然后新数据帧中的值是float,这都很好。就个人而言,在我的方法中,我看不到我在操作数据类型的任何地方,我的代码只是从原始数据帧中提取特定值的逻辑