在 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 中行的索引,但是 lastbrand 上排序,因此序列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']  

尽力而为:)