我试图弄清楚如何在Pandas数据帧中添加3个月的日期,同时保持日期格式,以便我可以使用它来查找范围.
这就是我尝试过的:
#create dataframe
df = pd.DataFrame([pd.Timestamp('20161011'),
pd.Timestamp('20161101') ], columns=['date'])
#create a future month period
plus_month_period = 3
#calculate date + future period
df['future_date'] = plus_month_period.astype("timedelta64[M]")
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
AttributeError: 'int' object has no attribute 'astype'
Run Code Online (Sandbox Code Playgroud)
关于如何做到这一点的任何想法?谢谢!
我目前正在使用以下代码导入6,000个csv文件(带标题)并将它们导出到单个csv文件中(带有单个标题行).
#import csv files from folder
path =r'data/US/market/merged_data'
allFiles = glob.glob(path + "/*.csv")
stockstats_data = pd.DataFrame()
list_ = []
for file_ in allFiles:
df = pd.read_csv(file_,index_col=None,)
list_.append(df)
stockstats_data = pd.concat(list_)
print(file_ + " has been imported.")
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常,但速度很慢.处理最多可能需要2天.
我得到了终端命令行的单行脚本,它执行相同的操作(但没有标题).这个脚本需要20秒.
for f in *.csv; do cat "`pwd`/$f" | tail -n +2 >> merged.csv; done
Run Code Online (Sandbox Code Playgroud)
有谁知道如何加速第一个Python脚本?为了缩短时间,我考虑过不将它导入DataFrame并只是连接CSV,但我无法弄清楚.
谢谢.
更新到 pandas 1.4 后,当使用 frame.append 将字典附加到 Pandas DataFrame 时,我现在收到以下警告。
FutureWarning: The frame.append method is deprecated and will be
removed from pandas in a future version. Use pandas.concat instead.
Run Code Online (Sandbox Code Playgroud)
下面是代码。尽管我想解决该警告,但这仍然有效。
report = report.append({
"period":period,
"symbol":symbol,
"start_date":start_date,
"start_price":start_price,
"start_market_cap":start_market_cap,
"end_date":end_date,
"end_price":end_price,
"end_market_cap":end_market_cap,
"return":return_
},ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
我已将代码更新为以下内容,这会引发不同的警告:
report = pd.concat([report,{
"period":period,
"symbol":symbol,
"start_date":start_date,
"start_price":start_price,
"start_market_cap":start_market_cap,
"end_date":end_date,
"end_price":end_price,
"end_market_cap":end_market_cap,
"return":return_
}],ignore_index=True)
TypeError: cannot concatenate object of type '<class 'dict'>'; only Series and DataFrame objs are valid
Run Code Online (Sandbox Code Playgroud)
2个问题:第一个警告是错误的吗?pandas 1.4 实现这一目标的方法是什么?谢谢。
我正在尝试计算数据框中每个数字的百分位数,并将其添加到名为"百分位数"的新列中.
这是我的尝试:
import pandas as pd
from scipy import stats
data = {'symbol':'FB','date':['2012-05-18','2012-05-21','2012-05-22','2012-05-23'],'close':[38.23,34.03,31.00,32.00]}
df = pd.DataFrame(data)
close = df['close']
for i in df:
df['percentile'] = stats.percentileofscore(close,df['close'])
Run Code Online (Sandbox Code Playgroud)
该列未填充并导致"NaN".这应该相当容易,但我不确定我哪里出错了.
在此先感谢您的帮助.
我正在尝试使用日历年的季度结束日期创建一个新列(例如,如果今天是 8 月 4 日,则本季度的结束日期将是 9 月 30 日)。
我的 DataFrame 在名为 df['dates'] 的列中有一组日期。示例如下:
03/08/2017
26/02/2015
31/12/2012
16/04/2014
13/04/2016
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码,它不起作用:
df['q_date'] = pd.datetime(pd.tseries.offsets.QuarterEnd(startingMonth=(pd.to_datetime(df['date']).dt.month)))
Run Code Online (Sandbox Code Playgroud)
我也尝试过循环但没有成功。
任何想法都非常感谢。谢谢。