将不同元素类型的列表转换为整数列表

Convert list of different element types to list of integers

我有一个不同元素类型的列表(从数据框中的列中提取),我想将其转换为相同的元素类型(整数)。数据框如下所示:

因为“系统性银行危机(开始日期)”列下的某些行只有一年,而其他行有好几年,因此提取的列表最终如下所示:

[1994, 1990年, 南, '1980, 1989, 1995, 2001', 1994, 南, 2008年, 1995年, 1987年, 南, 1995年, 2008年, 楠,...]

有多年(多次银行危机)的国家是一个字符串,而只有一年的国家是一个整数。我想通过遍历每个国家并制作一个虚拟变量 运行ning 从 1970 年到 2019 年将数据转换为面板数据,如果存在银行危机则取值 1,否则取值 0。为此,我有 运行 以下代码:

data_banking = data['Systemic Banking Crisis (starting date)'].to_list()
data_currency = data['Currency Crisis (year)'].to_list()
countries = data['Country'].to_list()

#making lists
years = [1970]
for i in range(1971, 2020):
    years.append(i)
banking_crisis = []
currency_crisis = []

countries_long = []
for i in countries:
    country = [i for x in range(50)]
    countries_long.extend(country)

years_long = []
for i in range(166):
    years_long.extend(years)

    
for i in data_banking:
    for y in years:
        if y==i:
            banking_crisis.append(1)
        else:
            banking_crisis.append(0)
            
banking = pd.DataFrame(list(zip(countries_long, years_long, banking_crisis)))

这适用于所有只有一次银行危机和 returns 数据框如下所示的国家/地区:

然而,对于发生多次银行危机的国家,python 不理解代码,因为年份在一个字符串中。我该如何解决? 我试图将列表 data_banking 转换为列表列表,将所有列表元素转换为字符串,然后拆分字符串并将每个字符串元素转换为整数,以便我可以遍历每个(国家/地区)中的每个元素data_banking 列表的列表,但它不起作用。 这些是我尝试过的不同变体:

def list_of_lists(lst):
    list_1 = [[el] for el in lst]
        #listToStr = ' '.join(map(str, lists))
    return list_1
        #list_1 = listToString(lists)
        #for string in list_values:
         #   list_values = list_1.split(",")
          #  string = int(string)
    #return list_1

data_banking = list_of_lists(data_banking)
for lists in data_banking:
    for item in lists:
        item = float(item)
#    lists = [str(x) for x in lists]

我该怎么办?

我将分两步完成整个操作。 (1) 首先,我遍历数据集并通过某种字符串格式存储一个字典列表,其中包含国家及其关联的每个单一年份(删除 NaN)。 (2) 然后我将这些结果编译到一个新的数据框中,确保年份列是数字。这是代码:

# Step 1
bank = 'Systemic Banking Crisis (starting date)'
rows = []
for _, row in data.iterrows():
    country = row['Country']
    years = row[bank]
    if pd.isna(years):
        continue
    for year in years.split(','):
        rows.append({'Country': country, bank:pd.to_numeric(year)})
# Step 2
df = pd.DataFrame(rows)
df[bank] pd.to_numeric(df[bank])

如果这对您不起作用,请告诉我。