cpe*_*505 2 python function dataframe pandas
我对 python 比较陌生,但一直在研究房地产市场的宠物项目。实际上,我已经读入了一系列文件并将其存储为原始格式的变量,如下所示:
**
cityrentalprice1BR.columns
Index([u'RegionName', u'State', u'Metro', u'CountyName', u'SizeRank',
u'2010-02', u'2010-03', u'2010-04', u'2010-05', u'2010-06',
...
u'2017-09', u'2017-10', u'2017-11', u'2017-12', u'2018-01', u'2018-02',
u'2018-03', u'2018-04', u'2018-05', u'2018-06'],
dtype='object', length=106)**
Run Code Online (Sandbox Code Playgroud)
“宽”格式对我的练习并不是特别有帮助,因此我使用了 Melt 函数来按城市获得更好的时间序列,并且在单个数据帧上的结果非常好:
cityrentalprice1BR_melt = pd.melt(cityrentalprice1BR, id_vars=['RegionName', 'State', 'Metro', 'CountyName', 'SizeRank'],
value_vars = dates,
value_name = 'Value',
var_name =['Date'])
cityrentalprice1BR_melt['Date'] = pd.to_datetime(cityrentalprice1BR_melt['Date'], format='%Y-%m')
Run Code Online (Sandbox Code Playgroud)
我的问题在于,我有多个文件需要以相同的格式导入,并且我不希望手动熔化每个数据帧。一个重要的警告是我更愿意将结果推送到新的唯一数据帧中(即上面的示例中 cityrentalprice1BR > cityrentalprice1BR_melt)。
我已经为此工作了一段时间,并创建了一个数据帧列表,并且可以将熔化函数应用到整个列表,如下所示,但是它缺少保留单独数据帧(或如果合并,则每个数据帧的列集)的关键目标函数更合适):
Rental = [cityrentalprice1BR, cityrentalprice2BR, cityrentalprice3BR, cityrentalprice4BR, cityrentalprice5BR, cityrentalpriceCondo, cityrentalpriceDupTri]
for size in Rental:
transformrent = pd.melt(size, id_vars=['RegionName', 'State', 'Metro', 'CountyName', 'SizeRank'],
value_vars = dates,
value_name = 'Value',
var_name =['Date'])
Run Code Online (Sandbox Code Playgroud)
任何指导将不胜感激。
通常,我在 Pandas 和 R 中建议始终使用许多相似对象的单个集合,而不是用单独的变量淹没全局环境。这使您可以管理一个大对象,而不是通过开放式计数可能忘记的许多对象的名称。想象一下浏览 10,000 个数据帧!更好地导航一个列表的 10,000 个索引或一本字典的 10,000 个键。
DataFrame
如果您将元素存储在列表、字典甚至命名元组中,那么您将失去零功能。另外,如果您需要跨所有操作运行操作,您可以使用一个用于此类操作的容器。下面展示了各种融化数据帧集合的构建(使用定义的函数),并演示了DataFrame
方法,甚至是批量操作,例如pd.concat
.
功能
def melt_data(df):
mdf = pd.melt(df, id_vars=['RegionName', 'State', 'Metro', 'CountyName', 'SizeRank'],
value_vars = dates, value_name = 'Value', var_name = 'Date')
return mdf
Run Code Online (Sandbox Code Playgroud)
列表
Rental_list = [cityrentalprice1BR, cityrentalprice2BR, cityrentalprice3BR, cityrentalprice4BR,
cityrentalprice5BR, cityrentalpriceCondo, cityrentalpriceDupTri]
# LIST COMPREHENSION
df_list = [melt_data(size) for size in Rental_list]
df_list[0].shape()
df_list[1].head()
df_list[2].tail()
df_list[3].sum()
df_list[4].mean()
# APPEND ALL
master_df = pd.concat(df_list, ignore_index)
Run Code Online (Sandbox Code Playgroud)
字典
Rental_dict = {'1BR': cityrentalprice1BR, '2BR': cityrentalprice2BR, '3BR': cityrentalprice3BR,
'4BR': cityrentalprice4BR, '5BR': cityrentalprice5BR,
'Condo': cityrentalpriceCondo, 'DupTri': cityrentalpriceDupTri}
# DICTIONARY COMPREHENSION
df_dict = {i+'_melt': melt_data(size) for i, size in Rental_dict.items()}
df_dict['1BR_melt'].shape()
df_dict['2BR_melt'].head()
df_dict['3BR_melt'].tail()
df_dict['Condo_melt'].sum()
df_dict['DupTri_melt'].mean()
# APPEND ALL
master_df = pd.concat(df_dict, ignore_index)
Run Code Online (Sandbox Code Playgroud)
命名元组
from collections import namedtuple
melt_dfs = namedtuple('melt_dfs', 'OneBR TwoBR ThreeBR FourBR FiveBR Condo DupTri')
df_tuple = melt_dfs(*[melt_data(size) for size in Rental_list])
# df_tuple = melt_dfs(*[melt_data(size) for i, size in Rental_dict.items()])
df_tuple.OneBR.shape()
df_tuple.TwoBR.head()
df_tuple.ThreeBR.tail()
df_tuple.FourthBR.sum()
df_tuple.FourthBR.mean()
# APPEND ALL
master_df = pd.concat(df_tuple, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
单独的变量:(
尽管如此,如果您确实需要单独的对象,只需从熔化的数据帧列表中解压即可:
cityrentalprice1BR_melt, cityrentalprice2BR_melt, cityrentalprice3BR_melt, \
cityrentalprice4BR_melt, cityrentalprice5BR_melt, \
cityrentalpriceCondo_melt, cityrentalpriceDupTri_melt = [melt_data(size) for size in Rental_list]
Run Code Online (Sandbox Code Playgroud)