我正在处理一些csv文件,并使用panda将它们转换为 Dataframe 。然后,我使用输入来查找要删除的值
我被一个小问题缠住了:对于某些列,它会将. 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条答案
按热度按时间lkaoscv71#
如果PersonalID是有问题列的标题,请尝试以下操作:
编辑:因为整数没有NaN值,你可以在每个有问题的列上试试:
oug3syen2#
你可以遍历每一个值,如果它是一个数字
x
,就减去int(x)
,如果差值不为0.0,就把x
转换成int(x)
,或者,如果你不处理任何非整数,就把所有的数字值都转换成int
s。后者的示例(当原始数据不包含任何非整数时):
对于前者的示例(如果您希望将非整数保持为非整数,但希望保证整数保持为整数):
请注意,上述方法并非万无一失:如果偶然地,来自原始数据集的非整数列包含全部为x.0000000(一直到最后一个小数位)的非整数,则这将失败。
cnwbcb6i3#
这是一个数据类型问题。
Alollz的评论把我引向了正确的方向。Pandas假设了一个浮点型的数据类型,它添加了小数点。
我在使用read_csv时将数据类型指定为object(来自Akarius的注解),这样就解决了这个问题。