将不同元素类型的列表转换为整数列表
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])
如果这对您不起作用,请告诉我。
我有一个不同元素类型的列表(从数据框中的列中提取),我想将其转换为相同的元素类型(整数)。数据框如下所示:
因为“系统性银行危机(开始日期)”列下的某些行只有一年,而其他行有好几年,因此提取的列表最终如下所示:
[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])
如果这对您不起作用,请告诉我。