Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 3.x 找到列值为0的行,并将其设置为“无”_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 找到列值为0的行,并将其设置为“无”

Python 3.x 找到列值为0的行,并将其设置为“无”,python-3.x,pandas,Python 3.x,Pandas,数据: 我知道如何定位两列都为0的行,另一方面,将它们设置为None是一个谜 f a b 5 0 1 5 1 3 5 1 3 5 6 3 5 0 0 5 1 5 5 0 0 预期结果: df_o[(df_o['a'] == 0) & (df_o['d'] == 0)] # set a and b to None 如果通过设计将数值None转换为NaN,将整数转换为float: f a b 5 0 1 5 1 3 5 1 3 5 6 3 5 None None 5 1 5 5 Non

数据:

我知道如何定位两列都为
0
的行,另一方面,将它们设置为
None
是一个谜

f a b
5 0 1
5 1 3
5 1 3
5 6 3
5 0 0
5 1 5
5 0 0
预期结果:

df_o[(df_o['a'] == 0) & (df_o['d'] == 0)]
# set a and b to None

如果通过设计将数值
None
转换为
NaN
,将整数转换为
float

f a b 
5 0 1
5 1 3
5 1 3
5 6 3
5 None None
5 1 5
5 None None
另一个解决方案是检查轴为1的每行是否所有
True
s:

df_o.loc[(df_o['a'] == 0) & (df_o['b'] == 0), ['a','b']] = None

print (df_o)
     a    b
0  0.0  1.0
1  1.0  3.0
2  1.0  3.0
3  6.0  3.0
4  NaN  NaN
5  1.0  5.0
6  NaN  NaN
详细信息

df_o.loc[(df_o[['a', 'b']] == 0).all(axis=1), ['a','b']] = None
print (df_o)
     a    b
0  0.0  1.0
1  1.0  3.0
2  1.0  3.0
3  6.0  3.0
4  NaN  NaN
5  1.0  5.0
6  NaN  NaN

如果通过设计将数值
None
转换为
NaN
,将整数转换为
float

f a b 
5 0 1
5 1 3
5 1 3
5 6 3
5 None None
5 1 5
5 None None
另一个解决方案是检查轴为1的每行是否所有
True
s:

df_o.loc[(df_o['a'] == 0) & (df_o['b'] == 0), ['a','b']] = None

print (df_o)
     a    b
0  0.0  1.0
1  1.0  3.0
2  1.0  3.0
3  6.0  3.0
4  NaN  NaN
5  1.0  5.0
6  NaN  NaN
详细信息

df_o.loc[(df_o[['a', 'b']] == 0).all(axis=1), ['a','b']] = None
print (df_o)
     a    b
0  0.0  1.0
1  1.0  3.0
2  1.0  3.0
3  6.0  3.0
4  NaN  NaN
5  1.0  5.0
6  NaN  NaN

我能想到的一个办法就是这样。创建数据帧的额外副本,并在将主数据帧上的值设置为“无”时分别检查这两个副本。不是最干净的解决方案,而是:

print ((df_o[['a', 'b']] == 0))
       a      b
0   True  False
1  False  False
2  False  False
3  False  False
4   True   True
5  False  False
6   True   True

print ((df_o[['a', 'b']] == 0).all(axis=1))
0    False
1    False
2    False
3    False
4     True
5    False
6     True
dtype: bool
输出:

import pandas as pd
import numpy as np

df = pd.DataFrame()

df['f'] = [5,5,5,5,5,5,5]
df['a'] = [0,1,1,6,0,1,0]
df['b'] = [1,3,3,3,0,5,0]

df1 = df.copy()
df['a'] = np.where((df.a == 0) & (df.b == 0), None, df.a)
df['b'] = np.where((df1.a == 0) & (df1.b == 0), None, df.b)
print(df)
import pandas as pd


a = pd.Series([0, 1, 1, 6, 0, 1, 0])
b = pd.Series([1, 3, 3, 3, 0, 5 ,0])

data = pd.DataFrame({'a': a, 'b': b})


v = [[data[i][j] for i in data] == [0, 0] for j in range(len(data['a']))]   # spot null rows

a = [None if v[i] else a[i] for i in range(len(a))]
b = [None if v[i] else b[i] for i in range(len(b))]

data = pd.DataFrame({'a': a, 'b': b})


print(data)

我能想到的一个办法就是这样。创建数据帧的额外副本,并在将主数据帧上的值设置为“无”时分别检查这两个副本。不是最干净的解决方案,而是:

print ((df_o[['a', 'b']] == 0))
       a      b
0   True  False
1  False  False
2  False  False
3  False  False
4   True   True
5  False  False
6   True   True

print ((df_o[['a', 'b']] == 0).all(axis=1))
0    False
1    False
2    False
3    False
4     True
5    False
6     True
dtype: bool
输出:

import pandas as pd
import numpy as np

df = pd.DataFrame()

df['f'] = [5,5,5,5,5,5,5]
df['a'] = [0,1,1,6,0,1,0]
df['b'] = [1,3,3,3,0,5,0]

df1 = df.copy()
df['a'] = np.where((df.a == 0) & (df.b == 0), None, df.a)
df['b'] = np.where((df1.a == 0) & (df1.b == 0), None, df.b)
print(df)
import pandas as pd


a = pd.Series([0, 1, 1, 6, 0, 1, 0])
b = pd.Series([1, 3, 3, 3, 0, 5 ,0])

data = pd.DataFrame({'a': a, 'b': b})


v = [[data[i][j] for i in data] == [0, 0] for j in range(len(data['a']))]   # spot null rows

a = [None if v[i] else a[i] for i in range(len(a))]
b = [None if v[i] else b[i] for i in range(len(b))]

data = pd.DataFrame({'a': a, 'b': b})


print(data)
df.replace(0,np.nan)
——获取nan(可能更有用)
df.replace(0,'None')
--您实际想要的

df.replace(0,np.nan)
--获取nan(可能更有用)
df.replace(0,'None')
——您真正想要的东西

这肯定不是最优雅的方法,但也许这会有所帮助

   f     a     b
0  5     0     1
1  5     1     3
2  5     1     3
3  5     6     3
4  5  None  None
5  5     1     5
6  5  None  None
输出:


这肯定不是最优雅的方式,但也许这会有所帮助

   f     a     b
0  5     0     1
1  5     1     3
2  5     1     3
3  5     6     3
4  5  None  None
5  5     1     5
6  5  None  None
输出:


我会这样做:

    a    b
0  0.0  1.0
1  1.0  3.0
2  1.0  3.0
3  6.0  3.0
4  NaN  NaN
5  1.0  5.0
6  NaN  NaN
输出:

import pandas as pd
import numpy as np

df = pd.DataFrame()

df['f'] = [5,5,5,5,5,5,5]
df['a'] = [0,1,1,6,0,1,0]
df['b'] = [1,3,3,3,0,5,0]

df1 = df.copy()
df['a'] = np.where((df.a == 0) & (df.b == 0), None, df.a)
df['b'] = np.where((df1.a == 0) & (df1.b == 0), None, df.b)
print(df)
import pandas as pd


a = pd.Series([0, 1, 1, 6, 0, 1, 0])
b = pd.Series([1, 3, 3, 3, 0, 5 ,0])

data = pd.DataFrame({'a': a, 'b': b})


v = [[data[i][j] for i in data] == [0, 0] for j in range(len(data['a']))]   # spot null rows

a = [None if v[i] else a[i] for i in range(len(a))]
b = [None if v[i] else b[i] for i in range(len(b))]

data = pd.DataFrame({'a': a, 'b': b})


print(data)

我会这样做:

    a    b
0  0.0  1.0
1  1.0  3.0
2  1.0  3.0
3  6.0  3.0
4  NaN  NaN
5  1.0  5.0
6  NaN  NaN
输出:

import pandas as pd
import numpy as np

df = pd.DataFrame()

df['f'] = [5,5,5,5,5,5,5]
df['a'] = [0,1,1,6,0,1,0]
df['b'] = [1,3,3,3,0,5,0]

df1 = df.copy()
df['a'] = np.where((df.a == 0) & (df.b == 0), None, df.a)
df['b'] = np.where((df1.a == 0) & (df1.b == 0), None, df.b)
print(df)
import pandas as pd


a = pd.Series([0, 1, 1, 6, 0, 1, 0])
b = pd.Series([1, 3, 3, 3, 0, 5 ,0])

data = pd.DataFrame({'a': a, 'b': b})


v = [[data[i][j] for i in data] == [0, 0] for j in range(len(data['a']))]   # spot null rows

a = [None if v[i] else a[i] for i in range(len(a))]
b = [None if v[i] else b[i] for i in range(len(b))]

data = pd.DataFrame({'a': a, 'b': b})


print(data)

更新了问题,不止这两列。
axis=1
在这种情况下做什么?它检查每行是否所有
True
s。更新了问题,不止这两列。
axis=1
在这种情况下做什么?它检查每行是否所有
True
s。不确定,由于这只是将
0
替换为
None
,因此我们需要使用一个条件设置
None
。或者你是说我的过滤器和你的“后缀”?对不起,误读了你的查询。Jezraels布尔方法很好(根据)。不确定,因为这只是将
0
替换为
None
,我们需要使用一个条件设置
None
。或者你是说我的过滤器和你的“后缀”?对不起,误读了你的查询。Jezraels布尔方法很好(根据)。