Python 使用掩码替换numpy数组中的字符串会导致字符串被截断
在一个更大的项目中,我使用遮罩根据一系列其他输入设置绘图的颜色。在一组中,默认颜色为Python 使用掩码替换numpy数组中的字符串会导致字符串被截断,python,pandas,numpy,Python,Pandas,Numpy,在一个更大的项目中,我使用遮罩根据一系列其他输入设置绘图的颜色。在一组中,默认颜色为'darkgreen',除非遮罩为True,然后它变为'white'。在第二组中,情况正好相反。下面的代码是仅包括掩码/阵列设置的MRE 将'darkgreen'转换为'white'的部分工作正常。但当我试图将'white'转换为'darkgreen'时,它会将其截断为'darkg'。我假设它在字符串中使用相同数量的字符,但我不确定为什么或如何修复它!提前谢谢 import numpy as np import
'darkgreen'
,除非遮罩为True
,然后它变为'white'
。在第二组中,情况正好相反。下面的代码是仅包括掩码/阵列设置的MRE
将'darkgreen'
转换为'white'
的部分工作正常。但当我试图将'white'
转换为'darkgreen'
时,它会将其截断为'darkg'
。我假设它在字符串中使用相同数量的字符,但我不确定为什么或如何修复它!提前谢谢
import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.randn(30, 2), columns=['A','B'])
a_mask = df['A'] > 0
b_mask = df['B'] > 0
n = 30
uca = ['darkgreen' for i in range(n)]
uca = np.array(uca)
uc = uca.copy()
uc[a_mask] = 'white'
dca = ['white' for i in range(n)]
dca = np.array(dca)
dc = dca.copy()
dc[b_mask] = 'darkgreen'
print(uc)
print(dc)
您需要使用numpy的
where
功能:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(30, 2), columns=['A', 'B'])
a_mask = df['A'] > 0
b_mask = df['B'] > 0
n = 30
uca = ['darkgreen' for i in range(n)]
uca = np.array(uca)
uc = uca.copy()
uc[a_mask] = 'white'
dca = ['white' for i in range(n)]
dca = np.array(dca)
dc = dca.copy()
dc = np.where(b_mask, 'darkgreen', dc)
print(uc)
print(dc)
您需要使用numpy的
where
功能:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(30, 2), columns=['A', 'B'])
a_mask = df['A'] > 0
b_mask = df['B'] > 0
n = 30
uca = ['darkgreen' for i in range(n)]
uca = np.array(uca)
uc = uca.copy()
uc[a_mask] = 'white'
dca = ['white' for i in range(n)]
dca = np.array(dca)
dc = dca.copy()
dc = np.where(b_mask, 'darkgreen', dc)
print(uc)
print(dc)
检查字符串数组的数据类型:
>>> uca.dtype
dtype('<U9')
>>> dca.dtype
dtype('<U5')
>>uca.dtype
数据类型('检查字符串数组的数据类型:
>>> uca.dtype
dtype('<U9')
>>> dca.dtype
dtype('<U5')
>>uca.dtype
dtype('我以前从未遇到过这种Ndarays怪癖-通常用于数字本身。如果它解决了您的问题,请不要忘记接受答案;)我以前从未遇到过这种Ndarays怪癖-通常用于数字本身。如果它解决了您的问题,请不要忘记接受答案;)numpy
带有字符串的数组具有固定的字符长度,例如U10
。检查dtype
。将较长的字符串写入数组会导致截断pandas
对字符串使用对象数据类型,因此没有截断。顺便说一句,你可以用uca中的['darkgreen']*n
替换['darkgreen']]
,对dca也是如此。numpy
带有字符串的数组具有固定的字符长度,例如U10
。检查dtype
。将较长的字符串写入数组会导致截断pandas
对字符串使用对象数据类型,因此没有截断。顺便说一句,您可以将['darkgreen'替换为uca中的i(n)]
和dca中的['darkgreen']*n
。