[英]return values from dataframe
我有这样的 python pandas 数据框,有 200k 到 400k 行
Index value
1 a
2
3 v
4
5
6 6077
7
8 h
并且我希望这个数据框值列根据字符串值的数量使用特定值填充所有下面的行(就像在这个表中我们有 1 个字符串值)。 我希望我的数据框是这样的。
Index value
1 a
2 a
3 v
4 v
5 v
6 v
7 v
8 h
如果需要重复长度为1
字符串,您可以通过正则表达式[a-zA-Z]{1}
使用Series.str.match
检查字符串长度是否为1
,将不匹配的值替换为NaN
s by Series.where
并最后向前填充ffill
缺失值:
df['value'] = df['value'].where(df['value'].str.match('^[a-zA-Z]{1}$', na=False)).ffill()
print (df)
Index value
0 1 a
1 2 a
2 3 v
3 4 v
4 5 v
5 6 v
6 7 v
7 8 h
另一个想法:
m1 = df['value'].str.len().eq(1)
m2 = df['value'].str.isalpha()
df['value'] = df['value'].where(m1 & m2).ffill()
fillna
的forward fill
方法正是为此。 这应该适合你:
df.fillna(method='ffill')
尝试这个,
import pandas as pd
df['value'].replace('\d+', pd.np.nan, regex=True).ffill()
0 a
1 a
2 v
3 v
4 v
5 v
6 v
7 h
Name: value, dtype: object
删除所有数字后,请执行以下操作:
df[df['value']==""] = np.NaN
df.fillna(method='ffill')
假设任何不是空字符串或数字的值都应该向前填充,那么正则表达式r'^\\d*$'
将匹配空字符串或数字。 这些值可以用np.nan
替换,然后可以调用ffill
:
import numpy as np
df['value'].replace(r'^\d*$', np.nan, regex=True, inplace=True)
df['value'].ffill(inplace=True)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.