python - Pandas 在多索引 DataFrame 中使用 loc 进行赋值

标签 python pandas python-2.7 dataframe indexing

我已经像这样初始化了一个数据框:

df = pd.DataFrame(columns=["stockname","timestamp","price","volume"])
df.timestamp = pd.to_datetime(df.timestamp, format = "%Y-%m-%d %H:%M:%S:%f")
df.set_index(['stockname', 'timestamp'], inplace = True)

现在我从某个地方获取数据流,但为了程序的缘故,让我这样写:

filehandle = open("datasource")

for line in filehandle:
    line = line.rstrip()
    data = line.split(",")
    stockname = data[4]
    price = float(data[3])
    timestamp = pd.to_datetime(data[0], format = "%Y-%m-%d %H:%M:%S:%f")
    volume = int(data[6])

    df.loc[stockname, timestamp] = [price, volume]

filehandle.close()

print df

但是这是错误的:

ValueError: cannot set using a multi-index selection indexer with a different length than the value

最佳答案

指定要为其分配数据的列名,即

df = pd.DataFrame(columns=["a","b","c","d"])
df.set_index(['a', 'b'], inplace = True)

df.loc[('3','4'),['c','d']] = [4,5]

df.loc[('4','4'),['c','d']] = [3,1]

      c    d
a b          
3 4  4.0  5.0
4 4  3.0  1.0

此外,如果您有一个逗号分隔的文件,那么您可以使用 read_csv 即:

import io
import pandas as pd
st = '''2017-12-08 15:29:58:740657,245.0,426001,248.65,APPL,190342,2075673,249.35,244.2
        2017-12-08 16:29:58:740657,245.0,426001,248.65,GOOGL,190342,2075673,249.35,244.2
        2017-12-08 18:29:58:740657,245.0,426001,248.65,GOOGL,190342,2075673,249.35,244.2
        '''
#instead of `io`, add the source name
df = pd.read_csv(io.StringIO(st),header=None)
# Now set the index and select what you want 
df.set_index([0,4])[[1,7]]

                                   1       7
 0                          4                   
2017-12-08 15:29:58.740657 APPL   245.0  249.35
2017-12-08 16:29:58.740657 GOOGL  245.0  249.35
2017-12-08 18:29:58.740657 GOOGL  245.0  249.35

关于python - Pandas 在多索引 DataFrame 中使用 loc 进行赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47737277/

相关文章:

python - 如何引用 Pandas 数据框的索引?

python - 根据 y 轴中的值对条形图中的条形进行排序

linux - [ Python 2.7 ]用Pynsist打包程序

python - 双三次插值 Python

python - Jupyter : How can I interactively select series to plot using widgets. SelectMultiple()?

python - Pylons - 除非我指定协议(protocol),否则重定向将从 HTTPS 下降到 HTTP...有没有办法解决这个问题?

python - 使用 python 设置 dockerized Couchdb

python - 使用另一个数据帧的信息迭代数据帧

python-2.7 - 错误: [errno 13] Permission denied - What permissions does bottle py require?

python - 您如何知道哪个 pyTZ 实际上会按预期执行?