Используемые данные:
https://factfinder.census.gov/faces/tableservices/jsf/pages/productview.xhtml?pid=ACS_17_5YR_S0101&prodType=table
Цель
- Комбинированный df для всех лет (2011-2017)
- Прогноз Общая численность населения для теста почтовый индекс
Я хотел бы сделать комбинированный df на основе столбцов, которые существуют во всех фреймах данных.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import random
Как я читаю в каждом файле
# default cleaning method until proven otherwise
def clean_census_frame(csv_path , head=False , reset=True , set_index=False ):
'''
inputs)
>> csv_path
> path to csv
>> head
> default=False
>> if != False
> integer
>> returns the first {head} rows (using .head() method)
> instead of enitre dataframe
>> reset
> default=True
>> resets index after taking out rows
> if set to False
>> will not reset index
>> set_index
> default=False
> if != False
>> will set_index of new df to set_index
output)
>> dataframe cleaned like 2000 Census age&sex by 5-digit Zip Code (also how 2010 for same is cleaned)
how)
1. reads in csv , assumes it's large
2. makes a copy for editing
> and potential future use
3. locates readable column names and non-readable names
> readable
> e.g. Estimate; SEX AND AGE - Total population
>> assumes they are currently in row 0
> non-readable
> e.g. HC01_VC03
>> assumes they are currently == dataframe.columns
4. replaces dataframe.columns (non-readable) with readable column names
> and drops the old 0th column (column where readable names were stored)
'''
# load data
df = pd.read_csv( csv_path , low_memory=False )
# and copy
_df = df.copy()
# reset column names to current 0th row values
_df.columns = _df.iloc[0]
# new 2000 dataframe without row where values are from
clean_df = _df[1:]
# default
if reset==True:
# reset index
clean_df = clean_df.reset_index()
# set_index
if set_index:
clean_df = clean_df.set_index(set_index)
if head:
# return first {head} rows of dataframe
return clean_df.head(head)
else:
# return dataframe
return clean_df
.info () для каждого df после запуска clean_census_frame ()
Примечание: в порядке 2011-2017
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 33120 entries, 0 to 33119
Columns: 328 entries, index to Percent Margin of Error; HISPANIC OR LATINO AND RACE - Total housing units
dtypes: int64(1), object(327)
memory usage: 82.9+ MB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 33120 entries, 0 to 33119
Columns: 328 entries, index to Percent Margin of Error; HISPANIC OR LATINO AND RACE - Total housing units
dtypes: int64(1), object(327)
memory usage: 82.9+ MB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 33120 entries, 0 to 33119
Columns: 328 entries, index to Percent Margin of Error; HISPANIC OR LATINO AND RACE - Total housing units
dtypes: int64(1), object(327)
memory usage: 82.9+ MB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 33120 entries, 0 to 33119
Columns: 328 entries, index to Percent Margin of Error; HISPANIC OR LATINO AND RACE - Total housing units
dtypes: int64(1), object(327)
memory usage: 82.9+ MB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 33120 entries, 0 to 33119
Columns: 340 entries, index to Percent Margin of Error; CITIZEN, VOTING AGE POPULATION - Citizen, 18 and over population - Female
dtypes: int64(1), object(339)
memory usage: 85.9+ MB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 33120 entries, 0 to 33119
Columns: 340 entries, index to Percent Margin of Error; CITIZEN, VOTING AGE POPULATION - Citizen, 18 and over population - Female
dtypes: int64(1), object(339)
memory usage: 85.9+ MB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 33120 entries, 0 to 33119
Columns: 360 entries, index to Percent Margin of Error; CITIZEN, VOTING AGE POPULATION - Citizen, 18 and over population - Female
dtypes: int64(1), object(359)
memory usage: 91.0+ MB
None
После этого я попытался составить списки столбцов, но столкнулся с проблемой дублирования столбцов в одном и том же кадре данных. За 2011-2012 годы насчитывается 16 дубликатов. За 2013-2017 годы существует 8 дубликатов.
Ниже приведена информация о списках столбцов и множеств. Позже я опубликую больше информации о дубликатах.
'''identify columns'''
# 2011
tags11 = y11.columns
# 2012
tags12 = y12.columns
#2013
tags13 = y13.columns
# 2014
tags14 = y14.columns
# 2015
tags15 = y15.columns
#2016
tags16 = y16.columns
# 2017
tags17 = y17.columns
>>in>>
# tags is list of each tags above (in order 2011-2017)
for tag in tags:
print(f'len = {len(tag)}\nunique = {len(set(tag))}')
>>out>> (+ #year)
# 2011
len = 328
unique = 296
# 2012
len = 328
unique = 296
# 2013
len = 328
unique = 320
# 2014
len = 328
unique = 320
# 2015
len = 340
unique = 332
# 2016
len = 340
unique = 332
# 2017
len = 360
unique = 352
Сейчас я возвращаюсь к KMeans на каждом кадре данных, но хотел бы завершить на объединенном кадре данных. Не стесняйтесь сообщения (я новичок здесь). Спасибо!