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

如何释放pandas数据帧使用的内存?

我有一个非常大的csv文件,我在熊猫中打开如下....

import pandas
df = pandas.read_csv('large_txt_file.txt')
Run Code Online (Sandbox Code Playgroud)

一旦我这样做,我的内存使用量增加2GB,这是预期的,因为该文件包含数百万行.当我需要释放这个内存时,我的问题出现了.我跑了....

del df
Run Code Online (Sandbox Code Playgroud)

但是,我的内存使用率没有下降.这是释放熊猫数据帧所使用的内存的错误方法吗?如果是,那么正确的方法是什么?

python memory pandas

82
推荐指数
5
解决办法
8万
查看次数

将函数应用于DataFrame中的每个单元格

我有一个可能如下所示的数据框:

A        B        C
foo      bar      foo bar
bar foo  foo      bar
Run Code Online (Sandbox Code Playgroud)

我想查看每行的每个元素(或每列的每个元素)并应用以下函数来获取后续DF:

def foo_bar(x):
    return x.replace('foo', 'wow')

A        B        C
wow      bar      wow bar
bar wow  wow      bar
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的单行程可以为每个单元格应用一个函数?

这是一个简单的示例,因此除了应用函数之外,可能有更简单的方法来执行此特定示例,但我真正要问的是如何在数据帧中的每个单元格中应用函数.

python apply dataframe pandas

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

Python Pandas - 了解inplace = True

pandas库中很多次都有一个选项来更改对象,例如使用以下语句...

df.dropna(axis='index', how='all', inplace=True)
Run Code Online (Sandbox Code Playgroud)

我很好奇返回的内容以及inplace=True传递对象时的处理方式inplace=False.

正在修改的所有操作selfinplace=True?什么时候inplace=False立即创建一个新对象new_df = self,然后new_df返回?

python in-place pandas

53
推荐指数
4
解决办法
8万
查看次数

熊猫 - 计算所有列的z得分

我有一个包含单列ID的数据框,所有其他列都是我想要计算z分数的数值.这是它的一个小节:

ID      Age    BMI    Risk Factor
PT 6    48     19.3    4
PT 8    43     20.9    NaN
PT 2    39     18.1    3
PT 9    41     19.5    NaN
Run Code Online (Sandbox Code Playgroud)

我的一些列包含NaN值,我不想将其包括在z-score计算中,所以我打算使用提供给这个问题的解决方案:如何使用nans来规范化pandas列?

df['zscore'] = (df.a - df.a.mean())/df.a.std(ddof=0)
Run Code Online (Sandbox Code Playgroud)

我有兴趣将此解决方案应用于除ID列之外的所有列,以生成新的数据框,我可以将其保存为Excel文件

df2.to_excel("Z-Scores.xlsx")
Run Code Online (Sandbox Code Playgroud)

所以基本上; 如何计算每列的z分数(忽略NaN值)并将所有内容推送到新的数据框中?

SIDENOTE:熊猫中有一个叫做"索引"的概念让我感到恐惧,因为我不太了解它.如果索引是解决此问题的关键部分,请愚蠢地解释索引.

python indexing statistics pandas

33
推荐指数
5
解决办法
8万
查看次数

熊猫:dropna之后的原地重命名表现特别下降

我已将此报告为大熊猫问题.与此同时,我发布此处希望节省其他时间,以防他们遇到类似的问题.

在分析需要优化的进程时,我发现重命名列不在适当位置可以提高x120的性能(执行时间).分析表明这与垃圾收集有关(见下文).

此外,通过避免使用dropna方法来恢复预期的性能.

以下简短示例演示了因子x12:

import pandas as pd
import numpy as np
Run Code Online (Sandbox Code Playgroud)

就地=真

%%timeit
np.random.seed(0)
r,c = (7,3)
t = np.random.rand(r)
df1 = pd.DataFrame(np.random.rand(r,c), columns=range(c), index=t)
indx = np.random.choice(range(r),r/3, replace=False)
t[indx] = np.random.rand(len(indx))
df2 = pd.DataFrame(np.random.rand(r,c), columns=range(c), index=t)
df = (df1-df2).dropna()
## inplace rename:
df.rename(columns={col:'d{}'.format(col) for col in df.columns}, inplace=True)
Run Code Online (Sandbox Code Playgroud)

100个循环,最佳3:每循环15.6毫秒

第一输出线%%prun:

ncalls tottime percall cumtime percall filename:lineno(function)

1  0.018 0.018 0.018 0.018 {gc.collect}
Run Code Online (Sandbox Code Playgroud)

就地=假

%%timeit
np.random.seed(0)
r,c = (7,3)
t = np.random.rand(r)
df1 = pd.DataFrame(np.random.rand(r,c), …
Run Code Online (Sandbox Code Playgroud)

python performance in-place pandas

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

将 pandas 数据框中的所有 inf、-inf 值替换为 NaN

我有一个大型数据框,不同列中包含 inf、-inf 值。我想用 NaN 替换所有 inf、-inf 值

我可以逐栏这样做。所以这有效:

df['column name'] = df['column name'].replace(np.inf, np.nan)
Run Code Online (Sandbox Code Playgroud)

但我的代码在数据帧中一次性执行此操作却没有。

df.replace([np.inf, -np.inf], np.nan)
Run Code Online (Sandbox Code Playgroud)

输出不会替换 inf 值

replace find inf dataframe pandas

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

关于使用pandas inplace关键字参数的指南

使用指南是inplace什么?

例如,

df = df.reset_index()
Run Code Online (Sandbox Code Playgroud)

要么

df.reset_index(inplace=True)
Run Code Online (Sandbox Code Playgroud)

相识又有差别?

in-place python-2.7 pandas

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

如何用一个值python替换多个值

如何'Beer','Alcohol','Beverage','Drink'仅用数据替换数据'Drink'.

df.replace(['Beer','Alcohol','Beverage','Drink'],'Drink')
Run Code Online (Sandbox Code Playgroud)

不起作用

python string replace dataframe pandas

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

如何基于多个条件填充基于前一行的熊猫数据框列的行?

免责声明:这可能是重复的,但我找不到确切的解决方案。请随时将此问题标记为重复,并在评论中提供指向重复问题的链接。

我仍在学习 python 数据帧操作,这可能有一个我无法弄清楚的非常简单的解决方案。

我有一个带有单列的 python 数据框。现在,如果满足某些条件,我想将每一行的值更改为前一行的值。我已经创建了一个循环解决方案来实现这一点,但我希望有一个更有效的解决方案。

创建初始数据:

import numpy as np
import pandas as pd

data = np.random.randint(5,30,size=20)
df = pd.DataFrame(data, columns=['random_numbers'])

print(df)

    random_numbers
0                6
1               24
2               29
3               18
4               22
5               17
6               12
7                7
8                6
9               27
10              29
11              13
12              23
13               6
14              25
15              24
16              16
17              15
18              25
19              19
Run Code Online (Sandbox Code Playgroud)

现在让我们假设两个条件是 1) 值小于 10 和 2) 值大于 20。在任何这些情况下,将行值设置为前一行值。这已以循环格式实现,如下所示:

for index,row in df.iterrows():
    if index == …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

4
推荐指数
1
解决办法
276
查看次数

df.append()未追加到DataFrame

提出了有关添加带有WITH索引的行的问题,但是我还不清楚在没有索引的情况下为什么/为什么发生这种情况:

columnsList=['A','B','C','D']
df8=pd.DataFrame(columns=columnsList)
L=['value aa','value bb','value cc','value dd']
s = pd.Series(dict(zip(df8.columns, L)))
df8.append(s,ignore_index=True)
df8.append(s,ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

我希望这里有2X4数据帧。但是,没有添加任何值,也没有发生错误。

print(df8.shape)
#>>> (0,4)
Run Code Online (Sandbox Code Playgroud)

为什么不添加系列,为什么不出现任何错误?


如果我尝试使用LOC添加行,则会添加索引,

df8.loc[df8.index.max() + 1, :] = [4, 5, 6,7]
print(df8)
Run Code Online (Sandbox Code Playgroud)

结果:

     A  B  C  D
NaN  4  5  6  7
Run Code Online (Sandbox Code Playgroud)

我猜LOC和iLOC都不能用于添加没有索引名称的行(即Loc添加索引名称NaN,并且当索引号高于数据库行时不能使用iLoc)

python append series dataframe pandas

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

如何按多列对数据帧行进行排序

我在以特定样式格式化数据框时遇到问题。我想要将与一个相关的数据S/N全部聚集在一起。我对数据集的最终目标是绘制所有S/Ns 的 Dis 与 Rate 的关系图。我已经厌倦了迭代行来切片数据,但这并没有奏效。这种格式化的最佳(最简单)方法是什么?谢谢!

例如:S/N332 在第一行有Dis4.6 和Rate91.2,紧接着我希望它有S/N332、9.19DisRate76.2,依此类推,对于所有有S/N332 的行。

    S/N      Dis       Rate
0   332   4.6030  91.204062
1   445   5.4280  60.233917
2   999   4.6030  91.474156
3   332   9.1985  76.212943
4   445   9.7345  31.902842
5   999   9.1985  76.212943
6   332  14.4405  77.664282
7   445  14.6015  36.261851
8   999  14.4405  77.664282
9   332  20.2005  76.725955
10  445  19.8630  40.705467
11  999  20.2005  76.725955
12 …
Run Code Online (Sandbox Code Playgroud)

python dataframe python-3.x pandas

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

深入探讨何时应该在 Pandas 函数中使用 Inplace 参数以及为什么不使用它?

在操作数据帧时,在 Pandas 函数中使用就地参数可能是很常见的。

Inplace是在不同函数中使用的参数。一些函数中使用 inplace 作为属性,例如set_index(), dropna(), fillna(), reset_index(), drop(), replace()等等。该属性的默认值为False,它返回对象的副本。

我想详细了解什么时候在 pandas 函数中使用是好的做法inplace,什么时候也不应该这样做,以及原因。您能否在示例中进行演示以供参考,因为这个问题在使用 pandas 函数时很常见。

例如:

df.drop(columns=[your_columns], inplace=True)

在这种情况下,建议使用 inplace 和 drop 。另外,如果某些变量喜欢list依赖于数据框。就地更改它会影响依赖于它的其他变量的结果。另一个问题是在 pandas 数据帧上使用就地阻止方法链接。

python dataframe pandas

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