【问题标题】:Convert list of different element types to list of integers将不同元素类型的列表转换为整数列表
【发布时间】:2021-12-06 12:40:37
【问题描述】:

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

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

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

有多年(多次银行危机)的国家是一个字符串,而只有一年的国家是一个整数。我想通过遍历每个国家并制作一个从 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)))

这适用于所有只有一次银行危机的国家,并返回如下所示的数据框:

但是,对于发生多起银行危机的国家,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]

我该怎么办?

【问题讨论】:

标签: python dataframe panel-data


【解决方案1】:

我将分两步完成整个操作。 (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])

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

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 2011-01-24
    • 2014-12-23
    • 1970-01-01
    • 2018-07-20
    • 2018-12-26
    • 1970-01-01
    • 2014-07-29
    相关资源
    最近更新 更多