我刚刚将我的Pandas从0.11升级到0.13.0rc1.现在,该应用程序正在弹出许多新的警告.其中一个是这样的:
E:\FinReporter\FM_EXT.py:449: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE
Run Code Online (Sandbox Code Playgroud)
我想知道究竟是什么意思?我需要改变什么吗?
如果我坚持使用,我应该如何暂停警告quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE?
def _decode_stock_quote(list_of_150_stk_str):
"""decode the webpage and return dataframe"""
from cStringIO import StringIO
str_of_all = "".join(list_of_150_stk_str)
quote_df = pd.read_csv(StringIO(str_of_all), sep=',', names=list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg')) #dtype={'A': object, 'B': object, 'C': np.float64}
quote_df.rename(columns={'A':'STK', 'B':'TOpen', 'C':'TPCLOSE', 'D':'TPrice', 'E':'THigh', 'F':'TLow', 'I':'TVol', 'J':'TAmt', 'e':'TDate', 'f':'TTime'}, inplace=True)
quote_df = quote_df.ix[:,[0,3,2,1,4,5,8,9,30,31]]
quote_df['TClose'] = quote_df['TPrice']
quote_df['RT'] …Run Code Online (Sandbox Code Playgroud) 我有一个datetime64类型的数组:
dates = np.datetime64(['2010-10-17', '2011-05-13', "2012-01-15"])
Run Code Online (Sandbox Code Playgroud)
有没有比循环遍历每个元素更好的方法来获得np.array年:
years = f(dates)
#output:
array([2010, 2011, 2012], dtype=int8) #or dtype = string
Run Code Online (Sandbox Code Playgroud)
我正在使用稳定的numpy版本1.6.2.
我有这样格式的.csv文件
timestmp, p
2014/12/31 00:31:01:9200, 0.7
2014/12/31 00:31:12:1700, 1.9
...
Run Code Online (Sandbox Code Playgroud)
当读取pd.read_csv并使用时间str转换为datetime时pd.to_datetime,性能会急剧下降.这是一个最小的例子.
import re
import pandas as pd
d = '2014-12-12 01:02:03.0030'
c = re.sub('-', '/', d)
%timeit pd.to_datetime(d)
%timeit pd.to_datetime(c)
%timeit pd.to_datetime(c, format="%Y/%m/%d %H:%M:%S.%f")
Run Code Online (Sandbox Code Playgroud)
而且表现是:
10000 loops, best of 3: 62.4 µs per loop
10000 loops, best of 3: 181 µs per loop
10000 loops, best of 3: 82.9 µs per loop
Run Code Online (Sandbox Code Playgroud)
那么,我怎样才能提高pd.to_datetime从csv文件中读取日期的性能?
我在名为train的数据帧中有一个类型为string(object)的列I_DATE,如下所示.
I_DATE
28-03-2012 2:15:00 PM
28-03-2012 2:17:28 PM
28-03-2012 2:50:50 PM
Run Code Online (Sandbox Code Playgroud)
如何将I_DATE从字符串转换为数据时格式并指定输入字符串的格式.我看到了一些答案,但它不适用于AM/PM格式.
另外,如何根据pandas中的日期范围过滤行?
我是 matplotlib 的初学者。我正在尝试使用 matplotlib.pyplot 绘制数据框。问题是,每次我尝试绘制它时,都会出现以下错误:
ValueError: view limit minimum -35738.3640567 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units.
Run Code Online (Sandbox Code Playgroud)
根据错误,日期时间列中似乎有一个非日期时间值,但没有。
我试过使用 pd.to_datetime() 并尝试将时间戳的格式pd.to_datetime(df_google['datetime'], format = '%d/%m/%Y')更改为但没有任何变化。
这是我尝试使用的代码:
import matplotlib.pyplot as plt
df_google.plot()
plt.show()
Run Code Online (Sandbox Code Playgroud)
df_google 是一个带有列的数据框['datetime','price'],其中一些值如下:
datetime price
0 2018-05-15 1079.229980
1 2018-05-16 1081.770020
2 2018-05-17 1078.589966
3 2018-05-18 1066.359985
4 2018-05-21 1079.579956
5 2018-05-22 1069.729980
6 2018-05-23 1079.689941 …Run Code Online (Sandbox Code Playgroud) 所以我知道Python字符串是不可变的,但我有一个字符串:
c['date'] = "20110104"
Run Code Online (Sandbox Code Playgroud)
我想转换成哪个
c['date'] = "2011-01-04"
Run Code Online (Sandbox Code Playgroud)
我的代码:
c['date'] = c['date'][0:4] + "-" + c['date'][4:6] + "-" + c['date'][6:]
Run Code Online (Sandbox Code Playgroud)
似乎有点费解,不是吗?最好将它保存为单独的变量,然后再做同样的事情吗?或者基本上没有区别?
我有一个包含的数据框
user_id date browser conversion test sex age country
1 2015-12-03 IE 1 0 M 32.0 US
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的整个代码!
data["country"].fillna("missing")
data["age"].fillna(-10000, inplace=True)
data["ads_channel"].fillna("missing")
data["sex"].fillna("missing")
data['date'] = pd.to_datetime(data.date)
columns = data.columns.tolist()
columns = [c for c in columns if c not in ["test"]]
from sklearn import tree
clf = tree.DecisionTreeClassifier(max_depth=2, min_samples_leaf = (len(data)/100) )
clf = clf.fit(data[columns],data["test"])
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-560-95a8a54aa939> in <module>()
4 from sklearn import tree
5 clf = tree.DecisionTreeClassifier(max_depth=2, min_samples_leaf = (len(data)/100) )
----> …Run Code Online (Sandbox Code Playgroud) 我真的很擅长使用python作为数据分析工具,这是我第一次处理时间序列.我有一个数据集,其中包含第一列中的日期,以及一个"结果"整数,它是1或0.日期列已成功转换为时间对象.我尝试使用matplotlib的绘图函数直接绘制值,但这不起作用.示例:
Date Result
2017-01-06 0.0
2017-01-06 1.0
2017-01-06 0.0
2017-01-07 0.0
2017-01-07 0.0
Run Code Online (Sandbox Code Playgroud)
我尝试使用df.plot(),但结果图有非常不理想的结果.
在一天结束时我想要的是x轴上的日期和y轴上的"结果".我哪里错了?我正在做什么有什么问题?编辑:这是图表
我想将我的pandas数据帧的'Time'列中的所有项目从UTC转换为Eastern时间.但是,根据此stackoverflow帖子中的答案,pandas 0.20.3中不知道某些关键字.总的来说,我该怎么做呢?
tweets_df = pd.read_csv('valid_tweets.csv')
tweets_df['Time'] = tweets_df.to_datetime(tweets_df['Time'])
tweets_df.set_index('Time', drop=False, inplace=True)
Run Code Online (Sandbox Code Playgroud)
错误是:
tweets_df['Time'] = tweets_df.to_datetime(tweets_df['Time'])
File "/scratch/sjn/anaconda/lib/python3.6/site-packages/pandas/core/generic.py", line 3081, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'to_datetime'
Run Code Online (Sandbox Code Playgroud)
时间列中的项目如下所示:
2016-10-20 03:43:11+00:00
Run Code Online (Sandbox Code Playgroud)
更新:使用
tweets_df['Time'] = pd.to_datetime(tweets_df['Time'])
tweets_df.set_index('Time', drop=False, inplace=True)
tweets_df.index = tweets_df.index.tz_localize('UTC').tz_convert('US/Eastern')
Run Code Online (Sandbox Code Playgroud)
没有时间转换.知道什么可以修复吗?
更新2:所以下面的代码,当我使用iterrows()打印行['Time']时,它不会进行就地转换,它显示原始值.你知道如何进行就地转换吗?
tweets_df['Time'] = pd.to_datetime(tweets_df['Time'])
for index, row in tweets_df.iterrows():
row['Time'].tz_localize('UTC').tz_convert('US/Eastern')
for index, row in tweets_df.iterrows():
print(row['Time'])
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
data = pd.read_csv("Ari_atlag.txt", sep = '\t', header = 0)
#Num_array = pd.DataFrame(data).to_numpy()
print(data.head())
data.plot()
#data.columns = ['Date', 'Number_of_test', 'Avarage_of_ARI']
#print(Num_array)
plt.show()
Run Code Online (Sandbox Code Playgroud)
输出:
Date Number_of_test Avarage_of_ARI
0 2011-01 22 0.568734
1 2011-02 5 0.662637
2 2011-03 0 0.000000
3 2011-04 3 0.307692
4 2011-05 6 0.773611
Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)
和情节。
但对于图中的这段代码,x 轴是索引。但我想获取 x 轴上的日期。
如何使用 Number_of_test 绘制日期和使用 Avarage_of_ARI 绘制日期
我想,我应该以某种方式将字符串(日期)更改为日期,但不知道该怎么做。
最好的
python ×10
pandas ×8
datetime ×3
matplotlib ×3
csv ×1
dataframe ×1
numpy ×1
string ×1
time-series ×1