我刚刚将我的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) 我有一个非常大的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)
但是,我的内存使用率没有下降.这是释放熊猫数据帧所使用的内存的错误方法吗?如果是,那么正确的方法是什么?
我有一个可能如下所示的数据框:
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)
是否有一个简单的单行程可以为每个单元格应用一个函数?
这是一个简单的示例,因此除了应用函数之外,可能有更简单的方法来执行此特定示例,但我真正要问的是如何在数据帧中的每个单元格中应用函数.
在pandas库中很多次都有一个选项来更改对象,例如使用以下语句...
df.dropna(axis='index', how='all', inplace=True)
Run Code Online (Sandbox Code Playgroud)
我很好奇返回的内容以及inplace=True传递对象时的处理方式inplace=False.
正在修改的所有操作self时inplace=True?什么时候inplace=False立即创建一个新对象new_df = self,然后new_df返回?
我有一个包含单列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:熊猫中有一个叫做"索引"的概念让我感到恐惧,因为我不太了解它.如果索引是解决此问题的关键部分,请愚蠢地解释索引.
我已将此报告为大熊猫问题.与此同时,我发布此处希望节省其他时间,以防他们遇到类似的问题.
在分析需要优化的进程时,我发现重命名列不在适当位置可以提高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)
Run Code Online (Sandbox Code Playgroud)1 0.018 0.018 0.018 0.018 {gc.collect}
%%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) 我有一个大型数据框,不同列中包含 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 值
使用指南是inplace什么?
例如,
df = df.reset_index()
Run Code Online (Sandbox Code Playgroud)
要么
df.reset_index(inplace=True)
Run Code Online (Sandbox Code Playgroud)
相识又有差别?
如何'Beer','Alcohol','Beverage','Drink'仅用数据替换数据'Drink'.
df.replace(['Beer','Alcohol','Beverage','Drink'],'Drink')
Run Code Online (Sandbox Code Playgroud)
不起作用
免责声明:这可能是重复的,但我找不到确切的解决方案。请随时将此问题标记为重复,并在评论中提供指向重复问题的链接。
我仍在学习 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) 我提出了有关添加带有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)
我在以特定样式格式化数据框时遇到问题。我想要将与一个相关的数据S/N全部聚集在一起。我对数据集的最终目标是绘制所有S/Ns 的 Dis 与 Rate 的关系图。我已经厌倦了迭代行来切片数据,但这并没有奏效。这种格式化的最佳(最简单)方法是什么?谢谢!
例如:S/N332 在第一行有Dis4.6 和Rate91.2,紧接着我希望它有S/N332、9.19Dis和Rate76.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) 在操作数据帧时,在 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 数据帧上使用就地阻止方法链接。
pandas ×13
python ×11
dataframe ×8
in-place ×3
replace ×2
append ×1
apply ×1
find ×1
indexing ×1
inf ×1
memory ×1
performance ×1
python-2.7 ×1
python-3.x ×1
series ×1
statistics ×1
string ×1