我正在处理一些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”斩掉,以便重新导入它,并且我认为防止它首先发生是最容易的。
谢谢!
答案 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的评论),