Python 如何将范围字符串(箱)转换为数值,然后与Seaborn可视化一起使用
因此,我正在Jupyter笔记本中使用Python 3.7。我目前正在以从Python 如何将范围字符串(箱)转换为数值,然后与Seaborn可视化一起使用,python,pandas,seaborn,visualization,Python,Pandas,Seaborn,Visualization,因此,我正在Jupyter笔记本中使用Python 3.7。我目前正在以从.CSV文件导入的熊猫的形式探索一些调查数据。我想通过一些Seaborn可视化进一步探索,然而,数字数据是以年龄箱的形式收集的,使用字符串值 我有没有办法将这些列(年龄和近似家庭收入)转换成数值,然后与Seaborn一起使用?我尝试过搜索,但我的措辞似乎只是返回为具有数字值的列创建年龄箱的方法。我真的在寻找如何将字符串值转换为数值 还有,有没有人能告诉我如何改进我的搜索方法。为这样的事情寻找解决方案的理想措辞是什么 下面是
.CSV文件导入的熊猫
的形式探索一些调查数据。我想通过一些Seaborn
可视化进一步探索,然而,数字数据是以年龄箱的形式收集的,使用字符串值
我有没有办法将这些列(年龄
和近似家庭收入
)转换成数值,然后与Seaborn一起使用?我尝试过搜索,但我的措辞似乎只是返回为具有数字值的列创建年龄箱的方法。我真的在寻找如何将字符串值转换为数值
还有,有没有人能告诉我如何改进我的搜索方法。为这样的事情寻找解决方案的理想措辞是什么
下面是数据帧中的一个示例,使用df.head(5).to_dict()
,为匿名目的更改了值
'Age': {0: '45-54', 1: '35-44', 2: '45-54', 3: '45-54', 4: '55-64'},
'Ethnicity': {0: 'White', 1: 'White', 2: 'White', 3: 'White', 4: 'White'},
'Approximate Household Income': {0: '$175,000 - $199,999',
1: '$75,000 - $99,999',
2: '$25,000 - $49,999',
3: '$50,000 - $74,999',
4: nan},
'Highest Level of Education Completed': {0: 'Four Year College Degree',
1: 'Four Year College Degree',
2: 'Jr College/Associates Degree',
3: 'Jr College/Associates Degree',
4: 'Four Year College Degree'},
'2020 Candidate Choice': {0: 'Joe Biden',
1: 'Joe Biden',
2: 'Donald Trump',
3: 'Joe Biden',
4: 'Donald Trump'},
'2016 Candidate Choice': {0: 'Hillary Clinton',
1: 'Third Party',
2: 'Donald Trump',
3: 'Hillary Clinton',
4: 'Third Party'},
'Party Registration 2020': {0: 'Independent',
1: 'No Party',
2: 'No Party',
3: 'Independent',
4: 'Independent'},
'Registered State for Voting': {0: 'Colorado',
1: 'Virginia',
2: 'California',
3: 'North Carolina',
4: 'Oregon'}
在本例中,我建议根据字符串的格式为每种类型的类别设置“手动”转换。例如,对于账龄箱:
age = {0: '45-54', 1: '35-44', 2: '45-54', 3: '45-54', 4: '55-64'}
age_bins = {key: [int(age[key].split('-')[0]), int(age[key].split('-')[1])] for key in age}
您可以使用一些pandasSeries.str
方法
较小的示例数据集:
将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame(
{
“年龄”{0:“45-54”,1:“35-44”,2:“45-54”,3:“45-54”,4:“55-64”},
“种族:{0:“白人”,1:“白人”,2:“白人”,3:“白人”,4:“白人”},
“近似家庭收入”:{
0: "$175,000 - $199,999",
1: "$75,000 - $99,999",
2: "$25,000 - $49,999",
3: "$50,000 - $74,999",
4:np.nan,
},
}
)
#年龄、种族和家庭收入
#0 45-54白色175000-199999美元
#1 35-44白色75000-99999美元
#2 45-54白色25000-49999美元
#3 45-54白色50000-74999美元
#4 55-64白楠
我们可以遍历列列表并应用这些方法来解析熊猫中的所有范围。DataFrame
:
我们将按顺序使用的方法:
- -将逗号替换为零
- -从序列中提取数字
- -将提取的数字转换为浮动
- -重命名新列
- -将提取的数字添加回原始数据帧
对于[“年龄”、“近似家庭收入”]中的col:
df=df.join(
df[col]
.str.replace(“,”,“”,regex=False)
.str.extract(pat=r“^[$]*(\d+[-\s$]*(\d+)”)
.astype(“浮动”)
.rename({0:f“{col}{u lower”,1:f“{col}{u upper”},axis=“columns”)
)
#年龄种族近似家庭收入年龄\较低年龄\较高年龄\
#0 45-54白色175000美元-199999美元45.0 54.0
#1 35-44白色75000-99999美元35.0 44.0
#2 45-54白色25000-49999美元45.0 54.0
#3 45-54白色$50000-$74999 45.0 54.0
#4 55-64白色NaN 55.0 64.0
#
#近似家庭收入\u下限近似家庭收入\u上限
# 0 175000.0 199999.0
# 1 75000.0 99999.0
# 2 25000.0 49999.0
# 3 50000.0 74999.0
#4楠楠楠
难道你不能将范围转换成一个包含2个最小和最大整数值的列表,然后用它来绘图吗?
{0: [45, 54], 1: [35, 44], 2: [45, 54], 3: [45, 54], 4: [55, 64]}