Python 熊猫:更新列';E';列';C';值为';x';
我有一个数据帧,如:Python 熊猫:更新列';E';列';C';值为';x';,python,pandas,Python,Pandas,我有一个数据帧,如: A B C D E 0 NSPNT 'ACTENRGY' 'XD01' 'DSU' F 1 NSPNT 'ACTENRGY' 'XD21' 'DSU' F 2 NSPNT 'ACTENRGY' 'XD22' 'DSU' F 3 NSPNT 'ACTENRGY' 'XD23' 'DSU' F 4 NSPNT 'ACTE
A B C D E
0 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
1 NSPNT 'ACTENRGY' 'XD21' 'DSU' F
2 NSPNT 'ACTENRGY' 'XD22' 'DSU' F
3 NSPNT 'ACTENRGY' 'XD23' 'DSU' F
4 NSPNT 'ACTENRGY' 'XD24' 'DSU' F
5 NSPNT 'ACTENRGY' 'XD25' 'DSU' F
6 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
7 NSPNT 'ACTENRGY' 'ACK' 'MISC' F
8 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
9 NSPNT 'ACTENRGY' 'ACK' 'MISC' F
10 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
11 NSPNT 'ACTENRGY' 'ACK' 'MISC' F
12 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
13 NSPNT 'ACTENRGY' 'ACF' 'MISC' F
14 NSPNT 'ACTENRGY' 'ASF' 'MISC' F
15 NSPNT 'ACTENRGY' 'DEF' 'MISC' F
16 NSPNT 'ACTENRGY' 'RLR' 'RLR' T
我试图实现的是当列'C'='ACK'使列'E'=T
到目前为止,我尝试了以下方法:
import os
import pandas as pd
source_folder = 'D:/NSSCDB/STTS_RCL_Export/'
def editNSPNT():
for somefile in os.listdir(source_folder):
if (somefile.startswith(('nsscdb_output_dts')) and
somefile.endswith(('.txt'.lower()))):
df = pd.read_csv(source_folder + somefile, encoding='utf-8', names = ['A','B','C','D','E'], header=4)
#for x in df['C']:
#if (x == 'ACK'):
#df['E'] = 'T'
#df.E = ["T" if x == "ACK" for x in df.C]
df.loc[(df.C=='ACK')]['E'] = 'T'
print(df)
def main():
editNSPNT()
if __name__== "__main__":
main()
我一直尝试的两种方法都不管用,有人能告诉我我做错了什么吗?
谢谢 仅纠正以下问题:
结果是:
A B C D E
0 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
1 NSPNT 'ACTENRGY' 'XD21' 'DSU' F
2 NSPNT 'ACTENRGY' 'XD22' 'DSU' F
3 NSPNT 'ACTENRGY' 'XD23' 'DSU' F
4 NSPNT 'ACTENRGY' 'XD24' 'DSU' F
5 NSPNT 'ACTENRGY' 'XD25' 'DSU' F
6 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
7 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
8 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
9 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
10 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
11 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
12 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
13 NSPNT 'ACTENRGY' 'ACF' 'MISC' F
14 NSPNT 'ACTENRGY' 'ASF' 'MISC' F
15 NSPNT 'ACTENRGY' 'DEF' 'MISC' F
16 NSPNT 'ACTENRGY' 'RLR' 'RLR' T
使用您的原始代码,首先使用(不考虑简单的引号)对数据帧进行切片:
然后为切片数据帧的列E
指定一个值
['E'] = 'T'
换句话说,您是在更新切片,而不是数据帧本身
从熊猫文件:
.loc[]主要基于标签,但也可以与布尔值一起使用
数组
分解代码:
df.loc[df.C == "'ACK'", 'E']
df.C==“'ACK'”
将返回一个用于标识行的布尔数组,字符串'E'
将标识将立即接收新值的列,而无需切片。数据中的单引号是否会导致问题
df.loc[df['C'] == "'ACK'",'E'] = 'T'
使用双引号
A B C D E
0 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
1 NSPNT 'ACTENRGY' 'XD21' 'DSU' F
2 NSPNT 'ACTENRGY' 'XD22' 'DSU' F
3 NSPNT 'ACTENRGY' 'XD23' 'DSU' F
4 NSPNT 'ACTENRGY' 'XD24' 'DSU' F
5 NSPNT 'ACTENRGY' 'XD25' 'DSU' F
6 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
7 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
8 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
9 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
10 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
11 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
12 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
13 NSPNT 'ACTENRGY' 'ACF' 'MISC' F
14 NSPNT 'ACTENRGY' 'ASF' 'MISC' F
15 NSPNT 'ACTENRGY' 'DEF' 'MISC' F
16 NSPNT 'ACTENRGY' 'RLR' 'RLR' T
A B C D E
0 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
1 NSPNT 'ACTENRGY' 'XD21' 'DSU' F
2 NSPNT 'ACTENRGY' 'XD22' 'DSU' F
3 NSPNT 'ACTENRGY' 'XD23' 'DSU' F
4 NSPNT 'ACTENRGY' 'XD24' 'DSU' F
5 NSPNT 'ACTENRGY' 'XD25' 'DSU' F
6 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
7 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
8 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
9 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
10 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
11 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
12 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
13 NSPNT 'ACTENRGY' 'ACF' 'MISC' F
14 NSPNT 'ACTENRGY' 'ASF' 'MISC' F
15 NSPNT 'ACTENRGY' 'DEF' 'MISC' F
16 NSPNT 'ACTENRGY' 'RLR' 'RLR' T
解决方案使用:
输出:
A B C D E
0 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
1 NSPNT 'ACTENRGY' 'XD21' 'DSU' F
2 NSPNT 'ACTENRGY' 'XD22' 'DSU' F
3 NSPNT 'ACTENRGY' 'XD23' 'DSU' F
4 NSPNT 'ACTENRGY' 'XD24' 'DSU' F
5 NSPNT 'ACTENRGY' 'XD25' 'DSU' F
6 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
7 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
8 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
9 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
10 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
11 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
12 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
13 NSPNT 'ACTENRGY' 'ACF' 'MISC' F
14 NSPNT 'ACTENRGY' 'ASF' 'MISC' F
15 NSPNT 'ACTENRGY' 'DEF' 'MISC' F
16 NSPNT 'ACTENRGY' 'RLR' 'RLR' T
df.E=np.where(df.C.eq("'ACK'"),'T',df.E)
print(df)
A B C D E
0 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
1 NSPNT 'ACTENRGY' 'XD21' 'DSU' F
2 NSPNT 'ACTENRGY' 'XD22' 'DSU' F
3 NSPNT 'ACTENRGY' 'XD23' 'DSU' F
4 NSPNT 'ACTENRGY' 'XD24' 'DSU' F
5 NSPNT 'ACTENRGY' 'XD25' 'DSU' F
6 NSPNT 'ACTENRGY' 'XD01' 'DSU' F
7 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
8 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
9 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
10 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
11 NSPNT 'ACTENRGY' 'ACK' 'MISC' T
12 NSPNT 'ACTENRGY' 'ACU' 'MISC' F
13 NSPNT 'ACTENRGY' 'ACF' 'MISC' F
14 NSPNT 'ACTENRGY' 'ASF' 'MISC' F
15 NSPNT 'ACTENRGY' 'DEF' 'MISC' F
16 NSPNT 'ACTENRGY' 'RLR' 'RLR' T