相关疑难解决方法(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:向DataFrame添加多个空列

这可能是一个愚蠢的问题,但如何从列表中向DataFrame添加多个空列?

我可以:

df["B"] = None
df["C"] = None
df["D"] = None
Run Code Online (Sandbox Code Playgroud)

但我做不到:

df[["B", "C", "D"]] = None

KeyError: "['B' 'C' 'D'] not in index"
Run Code Online (Sandbox Code Playgroud)

python pandas

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

将空列表列添加到DataFrame

与此问题类似如何向数据框添加空列?,我有兴趣知道将一列空列表添加到DataFrame的最佳方法.

我要做的是基本上初始化一个列,当我遍历行来处理其中的一些时,然后在这个新列中添加一个填充列表来替换初始化值.

例如,如果以下是我的初始DataFrame:

df = pd.DataFrame(d = {'a': [1,2,3], 'b': [5,6,7]}) # Sample DataFrame

>>> df
   a  b
0  1  5
1  2  6
2  3  7
Run Code Online (Sandbox Code Playgroud)

然后我想最终得到类似的东西,其中每一行都已单独处理(显示的样本结果):

>>> df
   a  b          c
0  1  5     [5, 6]
1  2  6     [9, 0]
2  3  7  [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

当然,如果我尝试像df['e'] = []任何其他常量一样初始化,它认为我试图添加长度为0的项目序列,因此失败.

如果我尝试将新列初始化为NoneNaN,则在尝试将列表分配给某个位置时会遇到以下问题.

df['d'] = None

>>> df
   a  b     d
0  1  5  None
1  2  6  None
2  3  7 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

在这种情况下(Pandas)如何解决 KeyError(f"None of [{key}] are in the [{axis_name}]")?

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

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n
ID姓名电子邮件物理化学数学
1斯塔sta@example.com677890
2丹尼dany@example.com779889
3埃勒elle@example.com776790
\n
\n

现在我想使用 pandas 输出一个新的 CSV 文件,它也有新的列,例如如下所示:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ID姓名年级地址物理化学出席率数学全部的
\n
\n

我想在随机位置创建新列,并且希望将新列中的值设置为空白。

\n

我尝试过使用:

\n
import pandas as pd\n\ndf = pd.read_csv("sample.csv")\nfinal_df = df.loc[[\'id\',\'name\',\'grade\',\'address\',\'physics\',\'chemistry\',\'attendance\',\'maths\',\'total\']]\n
Run Code Online (Sandbox Code Playgroud)\n

当我这样做时,我收到一个错误:

\n
KeyError(f\xe2\x80\x9cNone of [{key}] are in the [{axis_name}]\xe2\x80\x9d)\n
Run Code Online (Sandbox Code Playgroud)\n

有任何想法或建议来安排这个。

\n

python numpy dataframe python-3.x pandas

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

pandas DataFrame.join 的运行时间(大“O”顺序)是多少?

这个问题更具概念性/理论性(与非常大的数据集的运行时间有关),所以我很抱歉没有一个最小的例子来展示。

我有一堆来自两个不同传感器的数据帧,我需要最终将它们连接成来自两个不同传感器(和)的两个非常大的数据帧,然后左连接成一个数据帧。我的数据是这样的,我也可以先加入,然后连接,或某种组合。我试图找出最有效的方法来做到这一点。df_snsr1df_snsr2

通过阅读这个 SO 答案,我知道它会pandas.concat为其所有数据帧的串联分配空间,如果您在循环中执行此操作,则可能会导致O(N**2)复制和一些主要的减速。因此,我目前首先构建一个大的数据帧列表(从文件加载),一次连接它们,然后加入两个大数据帧:

df_list = []
for file in my_pickle_files_snsr1:  # O(M) loop over M files
    df_list.append(pd.read_pickle(file))  # O(1) append, M times
df_snsr1 = pd.concat(df_list)  # O(N) copies of N records
# repeat for sensor 2 (df_snsr2)
df_snsr1.join(df_snsr2, on=['some', 'columns'])  # O(dunno, maybe bears?)
Run Code Online (Sandbox Code Playgroud)

我无法在pandas.DataFrame.join. 是O(N)吗?O(N**2)? 我的想法是,如果它的顺序与 相似pandas.concat,那么我执行这两个操作的顺序真的无关紧要。O(N**2)但是,如果是,那么加入许多小数据帧然后连接对我来说可能会更有效他们而不是 concat 然后加入。整个操作需要足够长的时间,值得我在这里提出问题,所以“运行它并查看”是行不通的。

有人知道join正在使用什么算法以及它的执行大 O 顺序是什么吗?或者有人对获得最有效的join和组合有任何其他建议concat …

python big-o execution-time dataframe pandas

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

熊猫将对象的空列添加到数据框

如何将空列添加到数据框?

这已经部分覆盖。

dtype of df["D"] = np.nan在接受的答案是dtype=numpy.float64

有没有办法在每个单元格中初始化一个空列表?

尝试过,df["D"] = [[]] * len(df)但是所有值都指向同一对象,将一个值设置为一个将全部设置。

df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df

   A  B
0  1  2
1  2  3
2  3  4


df["D"] = [[]] * len(df)
df
   A  B   D
0  1  2  []
1  2  3  []
2  3  4  []


df['D'][1].append(['a','b','c','d'])
df
   A  B               D
0  1  2  [[a, b, c, d]]
1  2  3  [[a, b, c, d]]
2  3  4 …
Run Code Online (Sandbox Code Playgroud)

object dataframe pandas

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