Python/Pandas:基于Ex在附加文件中创建列

2024-04-24 08:37:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我将几个Excel文件中的信息附加到一个数据框中。每个Excel文件具有相同的结构,但对应于不同的城市。城市名称始终位于同一单元格(C2)中。你知道吗

如何在每个文件中提取城市名称,使其在新创建的数据框中显示为对应行的列?你知道吗

我附加的数据框如下所示:

 Col1     Col2      
 40       34
 104      108
 23        1
 43        21

因此,我无法判断哪些行属于文件X或文件Y。理想情况下,我希望有一个数据帧,例如:

Col1   Col2     Col3      
City A   40       34
City A  104      108
City B   23        1
City B   43       21

我不确定是否应该在添加相应的城市列之前直接编辑/写入Excel文件。或者我应该在附加到数据帧之后或者在附加到数据帧的过程中这样做。你知道吗

任何指导都会很好。你知道吗

编辑:这是我复制Excel工作表结构的最佳尝试。注意A列和第5、6、7行为空。城市名称位于第2行C列

我想提取第8行到第11行中的信息,并将C3单元格中的城市名称作为列添加到这些行的旁边。你知道吗

     ColA     ColB       ColC     ColD  ColE  ColF ColG
Row1          Type       XYZ                
Row2      CityName       XXX                
Row3      CityCode        10                
Row4         RYear        13                
Row5                        
Row6                        
Row7                        
Row8          Rank       Cat.       88    89   90    91
Row9            11         A       111   106  102   101
Row10           12         B       121   144  126   121
Row11           13         C       100   107  100   101

Edit2:按照ALollz的建议,我尝试了以下代码,但没有成功。我得到一个错误“'DataFrame'对象没有属性'ColC'”。请注意,files_xlsx是一个包含所有Excel文件的列表。你知道吗

all_data = pd.DataFrame()

 for f in files_xlsx:
    city_name = pd.read_excel(f, "SheetA", nrows=2).ColC[1]
    data = pd.read_excel(f, "SheetA", parse_cols="B:J")
    data['col_city'] = city_name
 all_data = all_data.append(data,ignore_index=True)

编辑3:不断尝试,终于找到了有效的方法。唯一的问题是cityname只设置为一行,而不是整列,这正是我想要的。有什么帮助吗?你知道吗

  df = pd.DataFrame()

for f in files_xlsx:
    city_name = pd.read_excel(f, "Sheet1", nrows=2, parse_cols="C", header=None, skiprows=1, skip_footer=264)    
    data = pd.read_excel(f, "Sheet1", parse_cols="B:J", header=None, skiprows=8) 
    data['City'] = city_name
    df = df.append(data)

Tags: 文件数据name名称编辑citydataframeread
1条回答
网友
1楼 · 发布于 2024-04-24 08:37:44

可以使用nrows=1将一个值只读到一个元素df,然后按^{}选择值:

f = 'file.xlsx'
city_name = pd.read_excel(f, "Sheet1", nrows=1, parse_cols="C", header=None, skiprows=1)    
print (city_name)
     0
0  XXX

data = pd.read_excel(f, "Sheet1", parse_cols="B:J", header=None, skiprows=8) 
data['City'] = city_name.iat[0,0]
print (data)
    0  1    2    3    4    5 City
0  11  A  111  106  102  101  XXX
1  12  B  121  144  126  121  XXX
2  13  C  100  107  100  101  XXX

循环中:

dfs = []
for f in files_xlsx:
    city_name = pd.read_excel(f, "Sheet1", nrows=1, parse_cols="C", header=None, skiprows=1)
    data = pd.read_excel(f, "Sheet1", parse_cols="B:J", header=None, skiprows=8)
    data['City'] = city_name.iat[0,0]
    dfs.append(data)

df = pd.concat(dfs, ignore_index=True)

相关问题 更多 >