繁体   English   中英

从数据帧返回值

[英]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()

fillnaforward 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM