相关疑难解决方法(0)

如何在Pandas中处理SettingWithCopyWarning?

背景

我刚刚将我的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)

python dataframe pandas chained-assignment

536
推荐指数
16
解决办法
58万
查看次数

从numpy datetime64获取年,月或日

我有一个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.

python datetime numpy

51
推荐指数
6
解决办法
7万
查看次数

为什么pandas.to_datetime对于非标准时间格式(例如'2014/12/31')来说很慢

我有这样格式的.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文件中读取日期的性能?

python csv python-datetime string-to-datetime pandas

40
推荐指数
2
解决办法
1万
查看次数

如何在pandas python中将字符串转换为日期时间格式?

我在名为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中的日期范围过滤行?

python datetime pandas

35
推荐指数
3
解决办法
7万
查看次数

ValueError: view limit minimum -35738.3640567 小于 1 并且是无效的 Matplotlib 日期值

我是 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 matplotlib pandas

13
推荐指数
1
解决办法
3万
查看次数

在python字符串中插入这些破折号的最快方法?

所以我知道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)

似乎有点费解,不是吗?最好将它保存为单独的变量,然后再做同样的事情吗?或者基本上没有区别?

python string string-formatting

11
推荐指数
3
解决办法
1万
查看次数

Pandas:TypeError:float()参数必须是字符串或数字

我有一个包含的数据框

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 pandas

8
推荐指数
2
解决办法
3万
查看次数

绘制时间序列?

我真的很擅长使用p​​ython作为数据分析工具,这是我第一次处理时间序列.我有一个数据集,其中包含第一列中的日期,以及一个"结果"整数,它是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轴上的"结果".我哪里错了?我正在做什么有什么问题?编辑:这是图表

python time-series matplotlib pandas

7
推荐指数
1
解决办法
2万
查看次数

AttributeError:'DataFrame'对象没有属性'to_datetime'

我想将我的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)

python datetime pandas

5
推荐指数
1
解决办法
2万
查看次数

如何在 matplotlib 中绘制我的 pandas 数据框

我有以下代码:

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 matplotlib pandas

5
推荐指数
2
解决办法
4819
查看次数