2017-09-19 47 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