Pandas 为 For 循环中的行分配新的列表值
Pandas Assign New List Value to Rows in For Loop
我需要每次通过 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'', filename)
li.append(temp) #a list of sites in order of reading files from path
dfn = df.assign(Plant_Name=li[count-1])
exit()
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'', filename): pd.read_csv(filename, index_col=None, header=0)
for filename in all_files
}, names=['Plant_Name']).reset_index('Plant_Name')
exit()
我需要每次通过 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'', filename)
li.append(temp) #a list of sites in order of reading files from path
dfn = df.assign(Plant_Name=li[count-1])
exit()
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'', filename): pd.read_csv(filename, index_col=None, header=0)
for filename in all_files
}, names=['Plant_Name']).reset_index('Plant_Name')
exit()