我刚刚将我的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
.
播放数据......
import pandas as pd
d = {
'one': [1, 2, 3, 4, 5],
'two': [9, 8, 7, 6, 5],
'three': ['a', 'b', 'c', 'd', 'e']
}
df = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)
到目前为止我找到的最优雅的解决方案......
names = df.columns.tolist()
names[names.index('two')] = 'new_name'
df.columns = names
Run Code Online (Sandbox Code Playgroud)
我希望有一个简单的单行...这次尝试失败了......
df.columns[df.columns.tolist().index('one')] = 'another_name'
Run Code Online (Sandbox Code Playgroud)
感激地收到任何提示.
我有一个名为的数据帧data
.如何重命名唯一的一个列标题?例如gdp
,以log(gdp)
?
data =
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
Run Code Online (Sandbox Code Playgroud) 我有df
:
df = pd.DataFrame({'a':[7,8,9],
'b':[1,3,5],
'c':[5,3,6]})
print (df)
a b c
0 7 1 5
1 8 3 3
2 9 5 6
Run Code Online (Sandbox Code Playgroud)
然后通过重命名第一个值这个:
df.columns.values[0] = 'f'
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好:
print (df)
f b c
0 7 1 5
1 8 3 3
2 9 5 6
print (df.columns)
Index(['f', 'b', 'c'], dtype='object')
print (df.columns.values)
['f' 'b' 'c']
Run Code Online (Sandbox Code Playgroud)
如果选择b
它很好:
print (df['b'])
0 1
1 3
2 5
Name: b, dtype: int64
Run Code Online (Sandbox Code Playgroud)
但如果选择a
它返回列f
: …
我有一个数据框,其列是 RangeIndex。我想改名字。
import pandas as pd
>>> my_df
0 1
Alpha -0.1234 0.001
Beta 0.7890 0.005
>>> my_df.columns
RangeIndex(start=0, stop=2, step=1)
Run Code Online (Sandbox Code Playgroud)
我想做类似的事情:
my_df = my_df.rename({'0': 'Betas', '1': 'P-values})
Run Code Online (Sandbox Code Playgroud)
它应该看起来像:
>>> my_df
Betas P-values
Alpha -0.1234 0.001
Beta 0.7890 0.005
Run Code Online (Sandbox Code Playgroud)
但它不会更改列名称。
我正在通过连接其他 DataFrame 的列来构建一个新的 DataFrame,如下所示:
pairs = pd.concat([pos1['Close'], pos2['Close'], pos3['Close'], pos4['Close'], pos5['Close'],
pos6['Close'], pos7['Close']], axis=1)
Run Code Online (Sandbox Code Playgroud)
我想将pairs
Dataframe 的所有列重命名为基础证券的符号。在 concat 方法调用期间有没有办法做到这一点?通读这里方法的文档http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.concat.html并没有给我一个可靠的答案。
我正在尝试使用Python和Pandas中的示例来创建D3 Force Directed Network Diagram
但在下面的行中我得到一个错误'KeyError :('count','发生在索引0')'
temp_links_list = list(grouped_src_dst.apply(lambda row: {"source": row['source'], "target": row['target'], "value": row['count']}, axis=1))
Run Code Online (Sandbox Code Playgroud)
我是python的新手.这是什么问题?
编辑过的代码
import pandas as pd
import json
import re
pcap_data = pd.read_csv('C:\packet_metadata.csv', index_col='No.')
dataframe = pcap_data
src_dst = dataframe[["Source","Destination"]]
src_dst.rename(columns={"Source":"source","Destination":"target"}, inplace=True)
grouped_src_dst = src_dst.groupby(["source","target"]).size().reset_index()
grouped_src_dst.rename(columns={'count':'value'}).to_dict(orient='records')
unique_ips = pd.Index(grouped_src_dst['source']
.append(grouped_src_dst['target'])
.reset_index(drop=True).unique())
Run Code Online (Sandbox Code Playgroud)
但
print(grouped_src_dst.columns.tolist())
['source', 'target', 0]
Run Code Online (Sandbox Code Playgroud)
最终代码
import pandas as pd
import json
import re
pcap_data = pd.read_csv('C:\packet_metadata.csv', index_col='No.')
dataframe = pcap_data
src_dst = dataframe[["Source","Destination"]]
src_dst.sample(10)
grouped_src_dst = src_dst.groupby(["Source","Destination"]).size().reset_index() …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Pythoncsv.DictReader
从 CSV 文件中读取值以创建一个字典,其中键是 CSV 中的第一行或标题,其他行是值。它按预期完美运行,我可以获得字典,但我只希望某些键在字典中,而不是所有列值。做这个的最好方式是什么?我试过使用,csv.reader
但我认为它没有这个功能。也许这可以使用熊猫来实现?
这是我在 CSV 模块中使用的代码,其中Fieldnames
我想在字典中保留的键。我意识到它不适用于我上面描述的内容。
import csv
with open(target_path+target_file) as csvfile:
reader = csv.DictReader(csvfile,fieldnames=Fieldnames)
for i in reader:
print i
Run Code Online (Sandbox Code Playgroud) 更新:这是“ usecols与parse_dates和名称 ” 的重复,但是首先回答了这个问题。
我无法获得这段代码来终生受益。一旦我取出该names
参数,它就可以正常工作,但这很愚蠢。
从一个以空格分隔的文件中,我想要:
这几乎可以工作:
import panadas as pd
columns = [4, 5, 10, 11, 15, 16, 17, 26, 28, 29]
names = ["DATE","TIME","DLAT", "DLON", "SLAT", "SLON", "SHGT", "HGT", "N", "E"]
ppp_data = pd.read_table(
filename,
delim_whitespace=True, # space delimited
skiprows=8, # skip header rows
header=None, # don't use first row as column names
usecols=columns, # only use selected columns
names=names, # use names for selected columns
parse_dates=[[4,5]], # join date …
Run Code Online (Sandbox Code Playgroud) 我想识别数据框中与字符串部分匹配的列名称,并将它们替换为原始名称以及添加到其中的一些新元素。新元素是由列表定义的整数。这是一个类似的问题,但恐怕建议的解决方案在我的特定情况下不够灵活。而这里是另一篇文章与接近我所面临的问题的一些优秀的答案。
我知道我可以组合两个字符串列表,将它们成对映射到字典中,并 使用字典作为函数中的输入重命名列df.rename
。但这似乎有点太复杂了,而且考虑到现有列的数量会有所不同,这不是很灵活。要重命名的列数也是如此。
以下代码段将生成一个输入示例:
# Libraries
import numpy as np
import pandas as pd
import itertools
# A dataframe
Observations = 5
Columns = 5
np.random.seed(123)
df = pd.DataFrame(np.random.randint(90,110,size=(Observations, Columns)),
columns = ['Price','obs_1','obs_2','obs_3','obs_4'])
datelist = pd.date_range(pd.datetime.today().strftime('%Y-%m-%d'),
periods=Observations).tolist()
df['Dates'] = datelist
df = df.set_index(['Dates'])
print(df)
Run Code Online (Sandbox Code Playgroud)
我想识别以 开头的列名obs_
,并newElements = [5, 10, 15, 20]
在=
符号后面的列表中添加元素(整数)。命名的列Price
保持不变。列之后出现的其他列obs_
也应保持不变。
以下代码段将演示所需的输出:
# Desired output
Observations = 5 …
Run Code Online (Sandbox Code Playgroud) pandas ×10
python ×8
dataframe ×3
python-3.x ×2
rename ×2
d3.js ×1
dictionary ×1
numpy ×1
python-2.7 ×1