Python 检查列标题起始字符

Python 检查列标题起始字符,python,pandas,dictionary,Python,Pandas,Dictionary,我有一本数据帧字典。我想循环遍历每个数据帧的列标题,以确保它们以字母开头。如果它们不是以字母开头,我将添加前缀“c_3;”。如何创建循环来检查每个字符串的第一个字符 以下是数据帧的代码: import os import glob files = glob.glob(os.path.join("staging" + "/*.csv")) print(files) # Create an empty dictionary to hold the dataframes from csvs di

我有一本数据帧字典。我想循环遍历每个数据帧的列标题,以确保它们以字母开头。如果它们不是以字母开头,我将添加前缀“c_3;”。如何创建循环来检查每个字符串的第一个字符

以下是数据帧的代码:

import os
import glob

files = glob.glob(os.path.join("staging" + "/*.csv"))

print(files)

# Create an empty dictionary to hold the dataframes from csvs
dict_ = {}

# Write the files into the dictionary
for file in files:
    fname = os.path.basename(file)
    fname = fname.replace('.csv', '')
    dict_[fname] = pd.read_csv(file, header = 0, dtype = str, encoding = 'cp1252').fillna('')
我认为您可以使用由
str[0]
创建的掩码来选择第一个字符和检查非数字,因为
Index.mask
尚未实现:

df.columns = df.columns.where(df.columns.str[0].str.isalpha(), 'c_' + df.columns)  
循环中的解决方案:

for file in files:
    fname = os.path.basename(file)
    fname = fname.replace('.csv', '')
    dict_[fname] = pd.read_csv(file, header = 0, dtype = str, encoding = 'cp1252').fillna('')
    mask = dict_[fname].columns.str[0].str.isalpha()
    dict_[fname].columns = dict_[fname].columns.where(mask, 'c_' + dict_[fname].columns)  
样本:

df = pd.DataFrame({'1A':list('abcdef'),
                   '3df':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   '34F':list('aaabbb')})

print (df)
  1A 34F  3df  C  D  E
0  a   a    4  7  1  5
1  b   a    5  8  3  3
2  c   a    4  9  5  6
3  d   b    5  4  7  9
4  e   b    5  2  1  2
5  f   b    4  3  0  4

df.columns = df.columns.where(df.columns.str[0].str.isalpha(), 'c_' + df.columns)
print (df)
  c_1A c_34F  c_3df  C  D  E
0    a     a      4  7  1  5
1    b     a      5  8  3  3
2    c     a      4  9  5  6
3    d     b      5  4  7  9
4    e     b      5  2  1  2
5    f     b      4  3  0  4
通过
~
使用和反转遮罩的类似解决方案:

df.columns = df.columns.where(~df.columns.str[0].str.isdigit(), 'c_' + df.columns)
print (df)
  c_1A c_34F  c_3df  C  D  E
0    a     a      4  7  1  5
1    b     a      5  8  3  3
2    c     a      4  9  5  6
3    d     b      5  4  7  9
4    e     b      5  2  1  2
5    f     b      4  3  0  4

我唯一不明白的是,它是如何附加非alpha列的,因为“mask”=.isalpha()=True……但是我在数据库中手动检查了文件,并且它们已经被追加编辑工作,因为
如果
为False
值,那么
在哪里工作。所以,如果不是alpha值,则添加后缀。