熊猫在使用read_csv时添加小数点

时间:2019-01-10 16:00:36

标签: python pandas csv

我正在处理一些csv文件,并使用熊猫将它们转换为数据框。之后,我使用输入来查找要删除的值

我挂在一个小问题上:对于某些列,它在列中的值上添加了“ .o”。它只在带有数字的列中执行此操作,因此我猜测它会将列读为浮点数。如何防止这种情况发生?

真正让我感到困惑的部分是,它只发生在几列中,所以我不太清楚模式。我需要将“ .0”斩掉,以便重新导入它,并且我认为防止它首先发生是最容易的。

谢谢!

这是我的代码示例:

clientid = int(input('What client ID needs to be deleted?'))

df1 = pd.read_csv('Client.csv')
clientclean = df1.loc[df1['PersonalID'] != clientid]
clientclean.to_csv('Client.csv', index=None)

理想情况下,我希望所有值都与原始csv文件相同,但不要包含用户输入中带有clientid的行。

真正让我感到困惑的部分是,它只发生在几列中,所以我不太清楚模式。我需要将“ .0”斩掉,以便重新导入它,并且我认为防止它首先发生是最容易的。

谢谢!

3 个答案:

答案 0 :(得分:0)

如果PersonalID如果是有问题的列的标题,请尝试以下操作:

df1 = pd.read_csv('Client.csv', dtype={'PersonalID':np.int32})

编辑: 由于没有整数的NaN值。 您可以在每个有问题的专栏上尝试一下:

df1[col] = df1[col].fillna(-9999) # or 0 or any value you want here
df1[col] = df1[col].astype(int)

答案 1 :(得分:0)

您可以遍历每个值,如果它是一个数字x,请从中减去int(x),如果该差不是0.0,则将数字x转换为{{ 1}}。或者,如果您不处理任何非整数,则可以将所有数字值转换为int(x)

以后者为例(当您的原始数据不包含任何非整数):

int

以前者为例(如果您想将非整数保留为非整数,但要保证整数保留为整数):

for index, row in df1.iterrows():
    for c, x in enumerate(row):
        if isinstance(x, float):
            df1.iloc[index,c] = int(x)

请注意,上述方法不是万无一失的:如果偶然,原始数据集中的非整数列包含全部为x.0000000的非整数,一直到最后一个小数位,这是将失败。

答案 2 :(得分:0)

这是一个数据类型问题。

ALollz的评论将我引向正确的方向。熊猫假设数据类型为float,会加上小数点。

在使用read_csv时,我将数据类型指定为对象(来自Akarius的评论),