Python 如何将范围字符串(箱)转换为数值,然后与Seaborn可视化一起使用

Python 如何将范围字符串(箱)转换为数值,然后与Seaborn可视化一起使用,python,pandas,seaborn,visualization,Python,Pandas,Seaborn,Visualization,因此,我正在Jupyter笔记本中使用Python 3.7。我目前正在以从.CSV文件导入的熊猫的形式探索一些调查数据。我想通过一些Seaborn可视化进一步探索,然而,数字数据是以年龄箱的形式收集的,使用字符串值 我有没有办法将这些列(年龄和近似家庭收入)转换成数值,然后与Seaborn一起使用?我尝试过搜索,但我的措辞似乎只是返回为具有数字值的列创建年龄箱的方法。我真的在寻找如何将字符串值转换为数值 还有,有没有人能告诉我如何改进我的搜索方法。为这样的事情寻找解决方案的理想措辞是什么 下面是

因此,我正在Jupyter笔记本中使用Python 3.7。我目前正在以从
.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}

您可以使用一些pandas
Series.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]}