Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从数据帧返回值_Python_Pandas_Dataframe - Fatal编程技术网

Python 从数据帧返回值

Python 从数据帧返回值,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样的数据帧,有200k到400k行 Index value 1 a 2 3 v 4 5 6 6077 7 8 h 我希望这个dataframe值列根据字符串值的数量用特定的值填充下面所有的行(就像在这个表中,我们有1个字符串值)。 我希望我的数据帧是这样的 Index value 1 a 2 a 3 v 4 v 5 v 6 v 7 v

我有这样的数据帧,有200k到400k行

Index value
  1     a
  2 
  3     v
  4
  5
  6    6077
  7
  8     h
我希望这个dataframe值列根据字符串值的数量用特定的值填充下面所有的行(就像在这个表中,我们有1个字符串值)。 我希望我的数据帧是这样的

Index value
  1     a
  2     a 
  3     v
  4     v
  5     v
  6     v
  7     v
  8     h

如果需要重复长度为
1
的字符串,您可以使用regex
[a-zA-Z]{1}
检查长度为
1
的字符串,将不匹配的值替换为
NaN
s,并使用
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()


删除所有号码后,请执行以下操作:

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)

因此,请删除数字并使用最后一个非空值填充?您是否尝试过lke
df[df['value']='']=np.NaN
然后
df.fillna(method='ffill')
?查看索引6中的原始问题,其中包含一个数字,该数字将被视为空字符串,不会向前传播(查看预期输出)。此外,您对
fillna
的调用将返回一个未分配给任何内容的新数据帧。此外,您对
fillna
的调用将对数据帧的所有单元格进行操作,我认为您不想这样做。1.您假设序列中存在
numpy.na
值,但它们是空字符串。2.中的值dex 6是一个数字,应将其视为一个空字符串。3.对
fillna
的调用返回一个未分配给任何对象的新数据帧。4.对
fillna
的调用将对数据帧的所有单元格进行操作,而您不希望这样做。1.这将仅替换索引6处的值,其他值为empty strings和not
np.nan
.2.从
ffill
返回一个新的数据帧,该数据帧没有分配给任何对象。如果您打算将两个或多个字母字符的值视为空字符串,那么您应该调用
fullmatch
@Booboo-我的意图是处理长度为1的字符串n您需要使用
fullmatch
或使用
$
锚定,因为对'xyz'应用的'match('[a-zA-Z]{1}')将返回对第一个字符的命中。
import numpy as np

df['value'].replace(r'^\d*$', np.nan, regex=True, inplace=True)
df['value'].ffill(inplace=True)