我正在关注韦斯·麦金尼(Wes Mckinney)的精彩著作,以了解pandas
的发展。但是,我似乎无法理解为什么pandas.Series.str.get
无法正常工作。我在这里查看了一些Github问题和问题,但似乎无济于事。
数据
data = pd.Series({'Dave': 'dave@google.com', 'Steve': 'steve@gmail.com', 'Rob': 'rob@yahoo.com', 'Wes': np.nan}
)
代码
import pandas as pd
import re
import numpy as np
pattern = '[a-zA-Z0-9]+@.*'
matches = data.str.match(pattern)
matches.str.get(1)
上面的代码应该可以工作,并导致类似:
Dave NaN
Rob NaN
Steve NaN
我确实使用了与本书不同的正则表达式模式,但不认为这是问题所在。
错误:
raise AttributeError(“仅可对字符串”“ values!”使用.str访问器。) AttributeError:只能将.str访问器与字符串值一起使用
我想念什么?我正在使用pycharm社区和python 3.6.6, 熊猫版本:0.24.2 如果有帮助的话。
答案 0 :(得分:2)
获得包含NaN
的序列的原因是因为matches
是布尔值Series
:
In[58]:
matches
Out[58]:
Dave True
Steve True
Rob True
Wes NaN
dtype: object
因此,在这种情况下将元素返回顺序位置是没有意义的,因此为什么要获得Series
个NaN
中的In[61]:
s = pd.Series(["String",
... (1, 2, 3),
... ["a", "b", "c"],
... 123,
... -456,
... {1: "Hello", "2": "World"}])
s
Out[61]:
0 String
1 (1, 2, 3)
2 [a, b, c]
3 123
4 -456
5 {1: 'Hello', '2': 'World'}
dtype: object
In[62]:
s.str.get(1)
Out[62]:
0 t
1 2
2 b
3 NaN
4 NaN
5 Hello
dtype: object
。
如果您查看文档中的示例:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.get.html#pandas.Series.str.get
NaN
因此,这里是按行的顺序返回每一行的元素。您可以看到,对于某些行,没有第二个元素,因此它返回 @Override
protected String doInBackground(String... params)
{
String usernam = username.getText().toString();
String passwordd = password.getText().toString();
if(usernam.trim().equals("")|| passwordd.trim().equals(""))
{
z = "Please enter Username and Password";
}
else
{
try
{
con = connectionclass(un, pass, db, ip);
if (con == null)
{
z = "Check Tour Internet Access!";
}
else
{
String query = "select * from login where user_name= '" + usernam.toString() + "' and pass_word = ' " + passwordd.toString();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
if(rs.next())
{
z = "Login successful";
isSuccess = true;
con.close();
}
else
{
z = "Invalid Credentials";
isSuccess = false;
}
}
}
catch (Exception ex)
{
isSuccess = false;
z = ex.getMessage();
}
}
return z;
}
。