我正在尝试对 Kenneth French 行业投资组合进行一些简单的分析(第一次使用 Pandas/Python),数据为 txt 格式(请参阅代码中的链接)。在我进行计算之前,首先要将其正确加载到 Pandas 数据框中,但我已经为此苦苦挣扎了几个小时:
import urllib.request
import os.path
import zipfile
import pandas as pd
import numpy as np
# paths
url = 'http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/48_Industry_Portfolios_CSV.zip'
csv_name = '48_Industry_Portfolios.CSV'
local_zipfile = '{0}/data.zip'.format(os.getcwd())
local_file = '{0}/{1}'.format(os.getcwd(), csv_name)
# download data
if not os.path.isfile(local_file):
print('Downloading and unzipping file!')
urllib.request.urlretrieve(url, local_zipfile)
zipfile.ZipFile(local_zipfile).extract(csv_name, os.path.dirname(local_file))
# read from file
df = pd.read_csv(local_file,skiprows=11)
df.rename(columns={'Unnamed: 0' : 'dates'}, inplace=True)
# build new dataframe
first_stop = df['dates'][df['dates']=='201412'].index[0]
df2 = df[:first_stop]
# convert date to datetime object …Run Code Online (Sandbox Code Playgroud) 在pandas中,有一个clip函数(参见https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.clip.html),它将值限制在用户提供的下限和上限内.朱莉娅的等价物是什么?即,我想:
> clip.([2 3 5 10],3,5)
> [3 3 5 5]
Run Code Online (Sandbox Code Playgroud)
很显然,我可以写我自己,或使用的组合min和max,但我很惊讶地发现,那里是没有的.StatsBase提供trim和winsor函数,但这些不允许固定值作为输入,而是计数或百分位数(https://juliastats.github.io/StatsBase.jl/stable/robust.html).