在 Dataframe 中将 STRING 转换为 INT 不适用于特定部分
Converting STR to INT on Dataframe doesn't work on the specific parts
我知道,这是一个简单的问题,但我在互联网上查了很多网站都找不到我遇到的问题。
我有一个数据框,该数据框的一列用于品牌。我想给这些品牌具体的数字,方便品牌聚合。
import pandas as pd
last = pd.read_pickle('pre_clustering.pkl')
random_number=9288
first=""
f=0
for i in last['brand']:
if(type(i)==str):
if(first == i):
last.at[f, 'brand']= random_number
print(last.loc[f, 'brand'])
f=f+1
elif(first !=i):
first=i
random_number= random_number +1
last.at[f, 'brand'] = random_number
print(last.loc[f, 'brand'])
f=f+1
else:
f=f+1
brand = last['brand']
This is my code and output.
我尽一切努力将它们转换为整数,但它们仍然是字符串。我通过使用 print() 控制了我的 if else 条件,它是 working as you see
我的代码有什么问题?或者我应该怎么做才能将我的字符串转换为整数?
你尝试过类型转换吗?使用 as.type('int')
。此处有更多详细信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.astype.html
在您的代码中,您使用 f
的序列作为 last
中行的索引,但是 last
在 brand
上排序,因此序列f
不是行的索引。结果,你把随机数放错了地方,留下了其他的。
为了更正代码,我们在for loop
中使用last.iterrows()
如下:
for f, row in last.iterrows():
i=row['brans']
其中 f
将是您处理的行的索引,因此您不需要 f=f+1
.
和 i
持有您处理的行中的 brand
。
最后,我添加了一些声明 (comment)
并修改了您的代码:
import pandas as pd
last = pd.read_pickle('pre_clustering.pkl')
random_number=9288
first=""
# f=0 (No need)
for f, row in last.iterrows(): # for i in last['brand']: (Changed: f is the actual row index)
i=row['brand'] # (added)
if(type(i)==str):
if(first == i):
last.at[f, 'brand']= random_number
print(last.loc[f, 'brand'])
# f=f+1 (No need)
elif (first !=i):
first=i
random_number= random_number +1
last.at[f, 'brand'] = random_number
print(last.loc[f, 'brand'])
# f=f+1
#else:
# f=f+1
brand = last['brand']
尽力而为:)
我知道,这是一个简单的问题,但我在互联网上查了很多网站都找不到我遇到的问题。
我有一个数据框,该数据框的一列用于品牌。我想给这些品牌具体的数字,方便品牌聚合。
import pandas as pd
last = pd.read_pickle('pre_clustering.pkl')
random_number=9288
first=""
f=0
for i in last['brand']:
if(type(i)==str):
if(first == i):
last.at[f, 'brand']= random_number
print(last.loc[f, 'brand'])
f=f+1
elif(first !=i):
first=i
random_number= random_number +1
last.at[f, 'brand'] = random_number
print(last.loc[f, 'brand'])
f=f+1
else:
f=f+1
brand = last['brand']
This is my code and output. 我尽一切努力将它们转换为整数,但它们仍然是字符串。我通过使用 print() 控制了我的 if else 条件,它是 working as you see
我的代码有什么问题?或者我应该怎么做才能将我的字符串转换为整数?
你尝试过类型转换吗?使用 as.type('int')
。此处有更多详细信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.astype.html
在您的代码中,您使用 f
的序列作为 last
中行的索引,但是 last
在 brand
上排序,因此序列f
不是行的索引。结果,你把随机数放错了地方,留下了其他的。
为了更正代码,我们在for loop
中使用last.iterrows()
如下:
for f, row in last.iterrows():
i=row['brans']
其中 f
将是您处理的行的索引,因此您不需要 f=f+1
.
和 i
持有您处理的行中的 brand
。
最后,我添加了一些声明 (comment)
并修改了您的代码:
import pandas as pd
last = pd.read_pickle('pre_clustering.pkl')
random_number=9288
first=""
# f=0 (No need)
for f, row in last.iterrows(): # for i in last['brand']: (Changed: f is the actual row index)
i=row['brand'] # (added)
if(type(i)==str):
if(first == i):
last.at[f, 'brand']= random_number
print(last.loc[f, 'brand'])
# f=f+1 (No need)
elif (first !=i):
first=i
random_number= random_number +1
last.at[f, 'brand'] = random_number
print(last.loc[f, 'brand'])
# f=f+1
#else:
# f=f+1
brand = last['brand']
尽力而为:)