我刚刚将我的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) 这可能是一个愚蠢的问题,但如何从列表中向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) 与此问题类似如何向数据框添加空列?,我有兴趣知道将一列空列表添加到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的项目序列,因此失败.
如果我尝试将新列初始化为None或NaN,则在尝试将列表分配给某个位置时会遇到以下问题.
df['d'] = None
>>> df
a b d
0 1 5 None
1 2 6 None
2 3 7 …Run Code Online (Sandbox Code Playgroud) 我有一个 CSV 文件,例如如下所示:
\n| ID | 姓名 | 电子邮件 | 物理 | 化学 | 数学 |
|---|---|---|---|---|---|
| 1 | 斯塔 | sta@example.com | 67 | 78 | 90 |
| 2 | 丹尼 | dany@example.com | 77 | 98 | 89 |
| 3 | 埃勒 | elle@example.com | 77 | 67 | 90 |
现在我想使用 pandas 输出一个新的 CSV 文件,它也有新的列,例如如下所示:
\n| ID | 姓名 | 年级 | 地址 | 物理 | 化学 | 出席率 | 数学 | 全部的 |
|---|
我想在随机位置创建新列,并且希望将新列中的值设置为空白。
\n我尝试过使用:
\nimport pandas as pd\n\ndf = pd.read_csv("sample.csv")\nfinal_df = df.loc[[\'id\',\'name\',\'grade\',\'address\',\'physics\',\'chemistry\',\'attendance\',\'maths\',\'total\']]\nRun Code Online (Sandbox Code Playgroud)\n当我这样做时,我收到一个错误:
\nKeyError(f\xe2\x80\x9cNone of [{key}] are in the [{axis_name}]\xe2\x80\x9d)\nRun Code Online (Sandbox Code Playgroud)\n有任何想法或建议来安排这个。
\n这个问题更具概念性/理论性(与非常大的数据集的运行时间有关),所以我很抱歉没有一个最小的例子来展示。
我有一堆来自两个不同传感器的数据帧,我需要最终将它们连接成来自两个不同传感器(和)的两个非常大的数据帧,然后左连接成一个数据帧。我的数据是这样的,我也可以先加入,然后连接,或某种组合。我试图找出最有效的方法来做到这一点。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 …
这已经部分覆盖。
该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)