2017-09-19 23 views
1

我有55列数据框,想要找到其中的列值satrts用“$”

我试过第一次出现字符串开始第一次出现的字符串(整列值)下面的脚本,但无法实现。

string = '' 
for col in df: 
    string=df[col].str.startswith('$') 
    if string!='': sys.exit() 

样品DF:

Col1 Col2 Col3 Col4 
123 5678 $45678 $5000 
54356 768 Rs.5432 6546 

预期结果:$ 45678,这是目前在第3列

+2

您可以添加数据示例吗?所有的行都包含'&'? – jezrael

+0

它有点不清楚你在问什么,请加上 – Dark

+0

@ jezrael的列样品,补充...请检查 – Plinus

回答

2

您可以先创建面膜:

m = df.astype(str).applymap(lambda x: x.startswith('$')) 
print (m) 
    Col1 Col2 Col3 Col4 
0 False False True True 
1 False False False False 

然后通过iat通过numpy.where的选择得到的行和列第一True位置:

print (np.where(m)) 
(array([0, 0], dtype=int64), array([2, 3], dtype=int64)) 

idx = np.where(m)[0][0] 
col = np.where(m)[1][0] 

a = df.iat[idx, col] 
$45678 
+0

@jezrael,谢谢 – Plinus

+0

这是错的,但现在我纠正它。 – jezrael

1

使用numpy.char.startswith

for col in df: 
    if np.any(np.char.startswith(np.asarray(df[col], str), '$')): 
     string = col 
     break 
else: 
    sys.exit() 
+1

我认为他有一个以'$'开头的字符串值。它的位不清 – Dark

+0

@Bharathshetty你是对的,谢谢。我希望现在好点... – jdehesa

+0

@jdehesa,thnaks将进一步工作 – Plinus

1

IIUC可以使用.loc.iloc基于条件即

mask = df.apply(lambda x : x.str.startswith('$').any(),0) 
#mask will return the boolean values so using loc we can access the columns 
col = df.loc[:,mask].iloc[:,0] 

输出col

 
0  $45678 
1 Rs.5432 
Name: Col3, dtype: object 
col[col.str.startswith('$')].values[0] 

'$45678' 
+0

谢谢巴拉特,将在此工作... – Plinus