相关疑难解决方法(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万
查看次数

对于有熊猫的循环 - 我什么时候应该关心?

我熟悉"矢量化"的概念,以及熊猫如何使用矢量化技术来加速计算.矢量化函数在整个系列或DataFrame上广播操作,以实现比传统迭代数据更大的加速.

但是,我很惊讶地看到很多代码(包括Stack Overflow的答案)提供了解决问题的方法,这些问题涉及使用for循环和列表推导来循环数据.阅读完文档后,对API有了不错的理解,我认为循环是"坏的",并且应该"永远"迭代数组,系列或DataFrame.那么,为什么我会不时地看到用户提出循环解决方案呢?

因此,要总结......我的问题是:
是否for循环真正的"坏"?如果不是,在什么情况下它们会比使用更传统的"矢量化"方法更好?1

1 - 虽然这个问题确实听起来有点宽泛,但事实是,当for循环通常比传统的迭代数据更好时,存在非常具体的情况.这篇文章旨在为后人捕捉这一点.

python iteration list-comprehension vectorization pandas

85
推荐指数
2
解决办法
7819
查看次数

替换python pandas数据帧中的部分字符串

我和这里发布的问题有类似的问题:

Pandas DataFrame:从列中的字符串中删除不需要的部分

我需要从DataFrame中的字符串中删除换行符.基本上,我使用python的json模块访问了一个api,这一切都没问题.创建DataFrame也非常有效.但是,当我想最终将最终结果输出到csv时,我有点卡住了,因为有新行在csv文件中创建了错误的"新行".

所以基本上我试图改变这个:

'......这是一个段落.

这是另一段...'

进入这个:

'......这是一个段落.这是另一段...'

我不关心为段落中保留任何类型的'\n'或任何特殊符号.所以它可以被剥夺.

我尝试了一些变化:

misc['product_desc'] = misc['product_desc'].strip('\n')

AttributeError: 'Series' object has no attribute 'strip'
Run Code Online (Sandbox Code Playgroud)

这是另一个

misc['product_desc'] = misc['product_desc'].str.strip('\n')

TypeError: wrapper() takes exactly 1 argument (2 given)

misc['product_desc'] = misc['product_desc'].map(lambda x: x.strip('\n'))
misc['product_desc'] = misc['product_desc'].map(lambda x: x.strip('\n\t'))
Run Code Online (Sandbox Code Playgroud)

没有错误消息,但换行符也不会消失.同样的事情:

misc = misc.replace('\n', '')
Run Code Online (Sandbox Code Playgroud)

写入csv行是这样的:

misc_id.to_csv('C:\Users\jlalonde\Desktop\misc_w_id.csv', sep=' ', na_rep='', index=False, encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)

熊猫的版本是0.9.1

谢谢!:)

python csv pandas

26
推荐指数
2
解决办法
6万
查看次数

删除pandas数据帧中的特殊字符

这似乎是一个固有的简单任务,但我发现很难从我的整个数据框中删除' '并返回每列中的数值,包括没有' ' 的数字.日期框架包含数百个列,简而言之:

Time            A1      A2
2.0002546296    1499    1592
2.0006712963    1252    1459
2.0902546296    1731    2223
2.0906828704    1691    1904
2.1742245370    2364    3121
2.1764699074    2096    1942
2.7654050926    *7639*  *8196*
2.7658564815    *7088*  *7542*
2.9048958333    *8736*  *8459*
2.9053125000    *7778*  *7704*
2.9807175926    *6612*  *6593*
3.0585763889    *8520*  *9122*
Run Code Online (Sandbox Code Playgroud)

我没有写它来迭代df中的每一列但是就第一列而言,我已经想出了这个

df['A1'].str.replace('*','').astype(float)
Run Code Online (Sandbox Code Playgroud)

产量

0        NaN
1        NaN
2        NaN
3        NaN
4        NaN
5        NaN
6        NaN
7        NaN
8        NaN
9        NaN
10       NaN
11       NaN
12       NaN
13       NaN
14       NaN
15 …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

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

如何使用模块re从数据框列中删除特殊characers?

嘿,我已经看到了这个链接,但在那里他们已经使用了re模块,这就是我在这里发布的原因.希望您理解并删除副本.

这是链接.我想用re模块.

表:

A    B    C    D
1    Q!   W@   2
2    1$   E%   3
3    S2#  D!   4
Run Code Online (Sandbox Code Playgroud)

在这里,我想从column B和删除特殊字符C.我已经使用.transform()但我想re尽可能使用它,但我收到了错误.

输出:

A    B    C    D   E   F
1    Q!   W@   2   Q   W
2    1$   E%   3   1   E
3    S2#  D!   4   S2  D
Run Code Online (Sandbox Code Playgroud)

我的代码:

df['E'] = df['B'].str.translate(None, ",!.; -@!%^&*)(")
Run Code Online (Sandbox Code Playgroud)

它只有在我知道什么是特殊字符时才有用.

但我想使用re哪种方式最好.

import re
#re.sub(r'\W+', '', your_string)
df['E'] = re.sub(r'\W+', '', df['B'].str) …
Run Code Online (Sandbox Code Playgroud)

python string pandas

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

无法将 Pandas 数据框导出到 excel/编码

由于一些编码困难,我无法导出我的数据帧之一。

sjM.dtypes

Customer Name              object
Total Sales               float64
Sales Rank                float64
Visit_Frequency           float64
Last_Sale          datetime64[ns]
dtype: object
Run Code Online (Sandbox Code Playgroud)

csv 导出工作正常

path = 'c:\\test'
sjM.to_csv(path + '.csv')   # Works
Run Code Online (Sandbox Code Playgroud)

但excel导出失败

sjM.to_excel(path + '.xls')

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "testing.py", line 338, in <module>
    sjM.to_excel(path + '.xls')
  File "c:\Anaconda\Lib\site-packages\pandas\core\frame.py", line 1197, in to_excel
    excel_writer.save()
  File "c:\Anaconda\Lib\site-packages\pandas\io\excel.py", line 595, in save
    return self.book.save(self.path)
  File "c:\Anaconda\Lib\site-packages\xlwt\Workbook.py", line 662, in save
    doc.save(filename, self.get_biff_data())
  File "c:\Anaconda\Lib\site-packages\xlwt\Workbook.py", line 637, in get_biff_data …
Run Code Online (Sandbox Code Playgroud)

python xlwt pandas

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

大熊猫的数据

我有一个CSV文件,其行如下所示:

ID,98.4,100M,55M,65M,75M,100M,75M,65M,100M,98M,100M,100M,92M,0#,0N#,
Run Code Online (Sandbox Code Playgroud)

我可以用它阅读

#!/usr/bin/env python

import pandas as pd
import sys

filename = sys.argv[1]
df = pd.read_csv(filename)
Run Code Online (Sandbox Code Playgroud)

给定一个特定的列,我想的行由ID,然后输出的平均值和标准偏差对每个ID分开.

我的第一个问题是,如何从数字中删除所有非数字部分,例如"100M"和"0N#",它们应分别为100和0.

我也试过循环相关的标题和使用

df[header].replace(regex=True,inplace=True,to_replace=r'\D',value=r'')
Run Code Online (Sandbox Code Playgroud)

正如Pandas DataFrame中所建议的那样:从列中的字符串中删除不需要的部分.

然而,这将98.4变为984.

python data-manipulation dataframe pandas data-munging

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

如何使用正则表达式从字符串中提取前两个字符

参考: Pandas DataFrame:从列中的字符串中删除不需要的部分

参考上面链接中提供的答案.我研究了一些正则表达式,我打算深入研究,但与此同时我可以使用一些帮助.

我的数据框是这样的:

DF:

  c_contofficeID
0           0109
1           0109
2           3434
3         123434  
4         1255N9
5           0109
6         123434
7           55N9
8           5599
9           0109
Run Code Online (Sandbox Code Playgroud)

Psuedo Code

如果前两个字符是12则删除它们.或者,在前两个字符中没有12的字符中添加12.

结果如下:

  c_contofficeID
0           0109
1           0109
2           3434
3           3434  
4           55N9
5           0109
6           3434
7           55N9
8           5599
9           0109
Run Code Online (Sandbox Code Playgroud)

我正在使用上面链接中的答案作为起点:

df['contofficeID'].replace(regex=True,inplace=True,to_replace=r'\D',value=r'')
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

尝试1)

df['contofficeID'].replace(regex=True,inplace=True,to_replace=r'[1][2]',value=r'')
Run Code Online (Sandbox Code Playgroud)

尝试2)

df['contofficeID'].replace(regex=True,inplace=True,to_replace=r'$[1][2]',value=r'')
Run Code Online (Sandbox Code Playgroud)

尝试3)

df['contofficeID'].replace(regex=True,inplace=True,to_replace=r'?[1]?[2]',value=r'')
Run Code Online (Sandbox Code Playgroud)

python regex pandas

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

从熊猫中的字符串中删除字符

我有一个与此类似的问题:Pandas DataFrame:从列中的字符串中删除不需要的部分

所以我使用了:

temp_dataframe['PPI'] = temp_dataframe['PPI'].map(lambda x: x.lstrip('PPI/'))
Run Code Online (Sandbox Code Playgroud)

大多数项目以“PPI/”开头,但不是全部。似乎当一个没有'PPI/'后缀的项目遇到这个错误时:

AttributeError: 'float' 对象没有属性 'lstrip'

我在这里错过了什么吗?

python pandas

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

如何删除数据框中的引号

我有一个像这样的数据框:

number    file
  1       "[file1,file2]"
  2       [file1]
  3       "[file3,file4]
Run Code Online (Sandbox Code Playgroud)

我想删除". 这是我尝试过的:

 data = df.replace([\"], '', regex=True)
Run Code Online (Sandbox Code Playgroud)

但是,我的数据框中没有任何变化。我该如何解决这个问题?

谢谢。

python dataframe python-3.x pandas

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