Python 检查列标题起始字符
我有一本数据帧字典。我想循环遍历每个数据帧的列标题,以确保它们以字母开头。如果它们不是以字母开头,我将添加前缀“c_3;”。如何创建循环来检查每个字符串的第一个字符 以下是数据帧的代码: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
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值,则添加后缀。