【问题标题】:Pandas Assign New List Value to Rows in For LoopPandas 为 For 循环中的行分配新的列表值
【发布时间】:2021-06-22 16:45:48
【问题描述】:

我每次都需要通过 for 循环在列中分配一个新的列表值。我的问题是我得到了分配给所有行的最后一个列表值。换言之,最后一个列表项出现在“Plant_Name”列的每一行中。下面的前 5 行应在“Plant_Name”中显示为 Caetite I,正如您从下面的第一个列表项中看到的那样。

我的数据框“dfn”看起来像这样 -

dfn.head()
Out[191]: 
      YYMMDD  HHMM  BestGuess(kWh)  Plant_Name
0  20180101   100         23405.0  SANTANA II
1  20180101   200         23302.0  SANTANA II
2  20180101   300         22885.0  SANTANA II
3  20180101   400         21315.0  SANTANA II
4  20180101   500         19476.0  SANTANA II

而且,最后一行看起来像这样 -

dfn.tail()
Out[190]: 
         YYMMDD  HHMM  BestGuess(kWh)  Plant_Name
26299  20201231  2000         9933.38  SANTANA II
26300  20201231  2100        19419.90  SANTANA II
26301  20201231  2200        22468.79  SANTANA II
26302  20201231  2300        22244.09  SANTANA II
26303  20210101     0        18975.02  SANTANA II

'li' 的列表值如下所示:

li
Out[192]: 
['CAETITE I',
'CAETITE II',
'CALANGO I',
'CALANGO II',
'LAGOA I',
'LAGOA II',
'SANTANA I',
'ARIZONA I',
'MEL II',
'CAETITE III',
'CALANGO III',
'CALANGO IV',
'CALANGO V',
'CALANGO VI',
'CANOAS',
'RIO DO FOGO',
'SANTANA II']

我的代码看起来像这样来创建附加列表和数据框'dfn':

import pandas as pd
import glob
from sys import exit
import re

pd.set_option('display.max_columns', None)

path = r'\\porfiler03\\gtdshare\\VORTEX\\OBS\\ALL\\' # use your path

all_files = glob.glob(path + "/*BRASIL*.csv")

li = []
temp = []

count = 0
for filename in all_files:
    count = count + 1
    df = pd.read_csv(filename, index_col=None, header=0) 
    temp = re.sub(r'.*\.(.*)\.Power.*', r'\1', filename)
    li.append(temp) #a list of sites in order of reading files from path
    dfn = df.assign(Plant_Name=li[count-1])

exit()

【问题讨论】:

    标签: pandas list loops assign


    【解决方案1】:

    IIUC:

    import pandas as pd
    import glob
    from sys import exit
    import re
    
    pd.set_option('display.max_columns', None)
    
    path = r'\\porfiler03\\gtdshare\\VORTEX\\OBS\\ALL\\' # use your path
    
    all_files = glob.glob(path + "/*BRASIL*.csv")
    
    dfn = pd.concat({
        re.sub(r'.*\.(.*)\.Power.*', r'\1', filename): pd.read_csv(filename, index_col=None, header=0)
        for filename in all_files
    }, names=['Plant_Name']).reset_index('Plant_Name')
    
    
    exit()
    

    【讨论】:

    • 这太棒了,今天解决了一个大问题!
    • 很高兴为您提供帮助。也请随时为答案投票,谢谢。
    猜你喜欢
    • 2019-07-24
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2021-11-18
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多