我有两个numpy数组light_points和time_points,并希望对这些数据使用一些时间序列分析方法.
然后我尝试了这个:
import statsmodels.api as sm
import pandas as pd
tdf = pd.DataFrame({'time':time_points[:]})
rdf = pd.DataFrame({'light':light_points[:]})
rdf.index = pd.DatetimeIndex(freq='w',start=0,periods=len(rdf.light))
#rdf.index = pd.DatetimeIndex(tdf['time'])
Run Code Online (Sandbox Code Playgroud)
这有效,但没有做正确的事情.实际上,测量不是均匀的时间间隔,如果我只是将time_points pandas DataFrame声明为我的帧的索引,我会收到一个错误:
rdf.index = pd.DatetimeIndex(tdf['time'])
decomp = sm.tsa.seasonal_decompose(rdf)
elif freq is None:
raise ValueError("You must specify a freq or x must be a pandas object with a timeseries index")
ValueError: You must specify a freq or x must be a pandas object with a timeseries index
Run Code Online (Sandbox Code Playgroud)
我不知道如何纠正这个问题.此外,似乎大熊猫TimeSeries已被弃用.
我试过这个:
rdf = pd.Series({'light':light_points[:]})
rdf.index = pd.DatetimeIndex(tdf['time'])
Run Code Online (Sandbox Code Playgroud)
但它给我一个长度不匹配: …
我正在寻找一种有效的方法来构建Python中的术语文档矩阵,可以与额外的数据一起使用.
我有一些带有一些其他属性的文本数据.我想对文本进行一些分析,我希望能够将从文本中提取的特征(例如单个字标记或LDA主题)与其他属性相关联.
我的计划是将数据加载为pandas数据框,然后每个响应都代表一个文档.不幸的是,我遇到了一个问题:
import pandas as pd
import nltk
pd.options.display.max_colwidth = 10000
txt_data = pd.read_csv("data_file.csv",sep="|")
txt = str(txt_data.comment)
len(txt)
Out[7]: 71581
txt = nltk.word_tokenize(txt)
txt = nltk.Text(txt)
txt.count("the")
Out[10]: 45
txt_lines = []
f = open("txt_lines_only.txt")
for line in f:
txt_lines.append(line)
txt = str(txt_lines)
len(txt)
Out[14]: 1668813
txt = nltk.word_tokenize(txt)
txt = nltk.Text(txt)
txt.count("the")
Out[17]: 10086
Run Code Online (Sandbox Code Playgroud)
请注意,在这两种情况下,文本的处理方式只有空格,字母和.?!被删除(为简单起见).
如您所见,转换为字符串的pandas字段返回的匹配项更少,字符串的长度也更短.
有没有办法改进上面的代码?
此外,str(x)在注释中[str(x) for x in txt_data.comment]创建一个大字符串,同时创建一个列表对象,该列表对象无法分解成一堆单词.生成nltk.Text保留文档索引的对象的最佳方法是什么?换句话说,我正在寻找一种方法来创建一个术语文档矩阵,R等同TermDocumentMatrix()于tm包.
非常感谢.
我有一个存储在pandas DataFrame中的股票价格数据,如下所示(实际上它在面板中,但我将其转换为DataFrame)
date ticker close tsr
0 2013-03-28 abc 22.81 1.000439
1 2013-03-28 def 94.21 1.006947
2 2013-03-28 ghi 95.84 1.014180
3 2013-03-28 jkl 31.80 1.000000
4 2013-03-28 mno 32.10 1.003125
...many more rows
Run Code Online (Sandbox Code Playgroud)
我想将它保存在Django模型中,它看起来像这样(匹配列名):
class HistoricalPrices(models.Model):
ticker = models.CharField(max_length=10)
date = models.DateField()
tsr = models.DecimalField()
close = models.DecimalField()
Run Code Online (Sandbox Code Playgroud)
我到目前为止最好的用它来保存它,其中df是我的DataFrame:
entries = []
for e in df.T.to_dict().values():
entries.append(HistoricalPrices(**e))
HistoricalPrices.objects.bulk_create(entries)
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来保存这个?
我看过django-pandas,但看起来它只是从数据库读取.
我正在使用大型生物数据集.
我想计算数据表中所有2列组合的PCC(Pearson相关系数),并将结果保存为DataFrame或CSV文件.
数据表如下所示:列是基因的名称,行是数据集的代码.浮点数表示基因在数据集中的激活程度.
GeneA GeneB GeneC ...
DataA 1.5 2.5 3.5 ...
DataB 5.5 6.5 7.5 ...
DataC 8.5 8.5 8.5 ...
...
Run Code Online (Sandbox Code Playgroud)
作为输出,我想构建如下所示的表(DataFrame或csv文件),因为scipy.stats.pearsonr函数返回(PCC,p值).在我的例子中,XX和YY表示pearsonr的结果([1.5,5.5,8.5],[2.5,6.5,8.5]).同样,ZZ和AA表示皮尔逊([1.5,5.5,8.5],[3.5,7.5,8.5])的结果.在我的测试中,我不需要像GeneB_GeneA或GeneC_GeneB这样的冗余数据.
PCC P-value
GeneA_GeneB XX YY
GeneA_GeneC ZZ AA
GeneB_GeneC BB CC
...
Run Code Online (Sandbox Code Playgroud)
由于列数和行数很多(超过100)并且它们的名称很复杂,因此使用列名或行名将很困难.
对于专家来说这可能是一个简单的问题,我不知道如何使用python和pandas库来处理这种表.特别是制作新的DataFrame并添加结果似乎非常困难.
抱歉我的解释不好,但我希望有人可以帮助我.
作为一项规则,我喜欢使用长的描述性列名(例如,estimated_background_signal而不仅仅是bg)用于DataFrame对象.这种偏好的一个缺点是,DataFrame显示形式有几列比它们的值要宽得多.例如:
In [10]: data.head()
barcode estimated_background_signal inhibitor_code inhibitor_concentration
0 R00577279 133 IRB 0.001
1 R00577279 189 SNZ 0.001
2 R00577279 101 CMY 0.001
3 R00577279 112 BRC 0.001
4 R00577279 244 ISB 0.001
Run Code Online (Sandbox Code Playgroud)
如果显示器更窄则会很好.无视标题,最窄的显示将是:
0 R00577279 113 IRB 0.001
1 R00577279 189 SNZ 0.001
2 R00577279 101 CMY 0.001
3 R00577279 112 BRC 0.001
4 R00577279 244 ISB 0.001
Run Code Online (Sandbox Code Playgroud)
......但完全取消标题并不是一个完全令人满意的解决方案.一个更好的方法是使显示宽度足以允许一些标题,可能占用几行:
barcode estim inhib inhib
ated_ itor_ itor_
backg code conce
0 R00577279 …Run Code Online (Sandbox Code Playgroud) 我有一个.csv包含多个表的文件.
使用熊猫,这将是拿到两个数据帧的最佳策略inventory,并HPBladeSystemRack从这个文件?
输入.csv看起来像这样:
Inventory
System Name IP Address System Status
dg-enc05 Normal
dg-enc05_vc_domain Unknown
dg-enc05-oa1 172.20.0.213 Normal
HP BladeSystem Rack
System Name Rack Name Enclosure Name
dg-enc05 BU40
dg-enc05-oa1 BU40 dg-enc05
dg-enc05-oa2 BU40 dg-enc05
Run Code Online (Sandbox Code Playgroud)
到目前为止,我提出的最好的方法是将此.csv文件转换为Excel工作簿(xlxs),将表拆分为表并使用:
inventory = read_excel('path_to_file.csv', 'sheet1', skiprow=1)
HPBladeSystemRack = read_excel('path_to_file.csv', 'sheet2', skiprow=2)
Run Code Online (Sandbox Code Playgroud)
然而:
xlrd模块.我pandas.stats.api.ols使用groupby带有以下代码的运行OLS回归:
from pandas.stats.api import ols
df=pd.read_csv(r'F:\file.csv')
result=df.groupby(['FID']).apply(lambda d: ols(y=d.loc[:, 'MEAN'], x=d.loc[:, ['Accum_Prcp', 'Accum_HDD']]))
for i in result:
x=pd.DataFrame({'FID':i.index, 'delete':i.values})
frame = pd.concat([x,DataFrame(x['delete'].tolist())], axis=1, join='outer')
del frame['delete']
print frame
Run Code Online (Sandbox Code Playgroud)
但是这会返回错误:
AttributeError: 'OLS' object has no attribute 'index'
Run Code Online (Sandbox Code Playgroud)
我的组中有大约2,000个项目,当我打印出每个项目时,它们看起来像这样:
-
------------------------Summary of Regression Analysis-------------------------
Formula: Y ~ <Accum_Prcp> + <Accum_HDD> + <intercept>
Number of Observations: 79
Number of Degrees of Freedom: 3
R-squared: 0.1242
Adj R-squared: 0.1012
Rmse: 0.1929
F-stat (2, 76): 5.3890, p-value: 0.0065
Degrees of Freedom: …Run Code Online (Sandbox Code Playgroud) 我有以下数据框架
data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],
'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions', 'Lions', 'Lions'],
'wins': [11, 8, 10, 15, 11, 6, 10, 4],
'losses': [5, 8, 6, 1, 5, 10, 6, 12]}
football = pd.DataFrame(data, columns=['year', 'team', 'wins', 'losses'])
football.set_index(['team', 'year'], inplace=True)
Run Code Online (Sandbox Code Playgroud)
sqrt在对列进行求和后,如何应用函数?
football[['wins', 'losses']].sum(axis=1)
Run Code Online (Sandbox Code Playgroud) 我需要初始化 a 列中的单元格DataFrameto lists。
df['some_col'] = [[] for _ in no_of_rows]
Run Code Online (Sandbox Code Playgroud)
我想知道在时间效率方面有没有更好的方法来做到这一点?
我觉得这应该很容易完成,但我无法弄清楚如何.我有一个pandas DataFrame列日期:
0 2012-08-21
1 2013-02-17
2 2013-02-18
3 2013-03-03
4 2013-03-04
Name: date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
我希望有一列持续时间,例如:
0 0
1 80 days
2 1 day
3 15 days
4 1 day
Name: date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
我的尝试产生了大量的0天NaT而是:
>>> df.date[1:] - df.date[:-1]
0 NaT
1 0 days
2 0 days
...
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
pandas ×10
python ×9
csv ×2
dataframe ×2
statsmodels ×2
correlation ×1
django ×1
excel ×1
nltk ×1
numpy ×1
python-2.7 ×1
python-3.x ×1
series ×1
time-series ×1
timedelta ×1