我有一个名为Reservation的列,它的一些行是空的,有些行有几个值。 我想在数字之前提取字母
print(df['Reservation'][:24])
0 NaN
1 NaN
2 NaN
3 NaN
...
24 B57 B59 B63 B66
我试过这个。
df['Room'] = df['Reservation'].astype(str).str[0]
但是我在结果中得到像Nan这样的空值。
print(df['Room'][:3])
0 n
1 n
2 n
3 n
结果应该是
print(df['Room'][:1])
1 B
然后我有下表,一些Days_of_Reservations是空的,所以我必须填写那些具有相同Profission和相同组织的中位数的embty raws。 就像前两个原始人一样,他们是来自同一组织的医生,所以应该将中间值填入纳米值。
Organization Days_of_Reservations Profission
or3 4 Doctor
0r3 Nan Doctor
or2 2 Teacher
or1 3 Teacher
or5 Nan Dentist
我感到害怕,我得到了这个错误。
med = df.groupby('Days_of_Reservations')['profission']['organization'].transform('median')
df['Days_of_Reservations'].fillna(med)
我收到此错误。
Exception: Column(s) ['profission'] already selected
答案 0 :(得分:0)
假设您只需要每个非<html>
<body>
<div>
<ul style="color:white; float: right;" class="nav navbar-nav">
<li><a href="/login">Login </a> </li>
<li><a href="#">Sign Up </a> </li>
</ul>
</div>
</body>
</html>
条目的第一个字符:
NaN
答案 1 :(得分:0)
在你的第一个数据框中,Reservation列应该是一个对象,所以你应该能够在删除nans之后得到这样的第一个非nan字符:
df['Room'] = df['Reservation'].dropna().str.get(0)
第二个问题。你正在向后使用groupby。分组列在groupby方法中,聚合列在此外面。
med = df.groupby(['Organization', 'Profission'])['Days_of_Reservations'].median()
然后,您可以使用以下
填写缺失的值df.set_index(['Organization', 'Profission'])['Days_of_Reservations'].fillna(med)
编辑:请从您的评论中使用以下代码进行测试
# create data for first question
df = pd.DataFrame({'Reservation': [np.nan, np.nan, 'B57 B59 B63 B66']})
# get first letter of non na
df['Room'] = df['Reservation'].dropna().str.get(0)
print(df)
输出继电器
Reservation Room
0 NaN NaN
1 NaN NaN
2 B57 B59 B63 B66 B
测试此代码
s=''' Organization Days_of_Reservations Profission
or3 4 Doctor
or3 Nan Doctor
or2 2 Teacher
or1 3 Teacher
or1 Nan Dentist
'''
df = pd.read_csv(StringIO.StringIO(s), sep='\s+')
df['Days_of_Reservations'] = df.Days_of_Reservations.astype(float)
med = df.groupby(['Organization', 'Profission'])['Days_of_Reservations'].median()
df.set_index(['Organization', 'Profission'])['Days_of_Reservations'].fillna(med).reset_index()
输出
Organization Profission Days_of_Reservations
0 or3 Doctor 4
1 or3 Doctor 4
2 or2 Teacher 2
3 or1 Teacher 3
4 or1 Dentist NaN