将对象从已解析的csv转换为int Python

问题描述 投票:0回答:1

这是我先前的问题-My Original Question。我正在提出一个新问题,因为我觉得遇到的问题已完全改变了我的问题。

我想将类型为object的列中的数据转换为int,因为值是整数。

填满列中的空白位置后,我仍然遇到错误。我发现csv文件中的第四列被视为对象,而不是int而不是所有其他列。这是我的代码:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np


file_name = "myfile.csv"
df = pd.read_csv(file_name)
names = df['name'].values

x = np.arange(len(names))*2
w = 0.40

col2 = df.columns[1]
col3 = df.columns[2]
col4 = df.columns[3]
col5 = df.columns[4]

print(df.dtypes)
df[col4] = df[col4].astype(str).astype(int)

dif = df[col4] - df[col3]

colors = ['Red' if d < -5 else 'Blue' for d in dif]

plt.bar(x-w, df[col2].values, width=w*0.7, label=col2, color = "cyan")
plt.bar(x, df[col3].values, width=w*0.7, label=col3, color = "green")
plt.bar(x+w, df[col4].values, width=w*0.7, label=col4, color = colors)
plt.plot(x, df[col5].values, lw=2, label="Goal", color = "red")

plt.xticks(x, names, rotation='vertical')
plt.ylim([0,100])

plt.show()

我将第四列对象转换为int的方法是,将astype附加为字符串,然后作为int附加到其末尾,如我的代码所示。我也尝试过只是追加astype int,但是那也不起作用。这是我得到的当前错误:ValueError: invalid literal for int() with base 10

请参阅上面链接的我的其他文章,以详细了解我如何到达这里,以防您觉得有帮助。

python pandas types
1个回答
-1
投票

我没有您的数据,但是在下面我用随机值填充4列数据,其中'col4'用字符串列表填充。然后,我使用astype(int)将该列转换为int。然后,用您的plt.bar将其绘制出来

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


df = pd.DataFrame()
df['col1'] = np.random.randint(1, 6, 5)
df['col2'] = np.random.randint(1, 16, 5)
df['col3'] = np.random.randint(2, 10, 5)
df['col4'] = ['4', '33','77','4','11']


df['col4']=df['col4'].astype(int)


plt.bar(df.index, df['col4'], width=0.7, label='col4', color = "cyan")
plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.