根据数据类型(float、Nan、string)对 Pandas 数据框的单列数据进行分组和拆分
Grouping and Splitting Data from a single column of a Pandas Dataframe Based on datatype (float,Nan,string)
根据我的具体问题,我尝试创建一个可重现的小示例,但没有达到目的。
附在问题的最后。
我目前正在阅读 27 excel 个文件。
所有的格式都一样(看起来所有的列都是一致的)。
我将此数据附加到由 9828 行和三列组成的单个 DataFrame 中。
名为"Target"的一列只能由浮点数或整数组成。
实际上构成目标列的单元格被读取为:
- 浮动
- 只有一种情况下,空单元格被读取为字符串
- 在其他情况下,空单元格被视为
None
为了了解哪个特定的 Column DataFrame 行包含 float/none/string 我创建了一种非常低效的方法来根据数据类型
检查和拆分数据框
dt_t is a dataframe with 3 columns one of this is called Target
This column is composed by 9398 non-null object.
The other two by 9828 non-null object.
df_string=pd.DataFrame()
df_float=pd.DataFrame()
df_null=pd.DataFrame()
for i in range(len(df_t.Target)):
if type(df_t.Target.loc[i])==str:
df_string=df_string.append(df_t.loc[i])
if type(df_t.Target.loc[i])==int or type(df_t.Target.loc[i])==float:
df_float=df_float.append(df_t.loc[i])
else:
df_null=df_null.append(df_t.loc[i])
不明白为什么:
存在重复。 df_string
和 df_null
包含相同的值
在浮动数据框中我还有 nan
个值
我的预期输出 是看到
- 一个数据帧中只有 float 和 int
- df_null
中只有 nan
- 只有 df_string 数据帧中的字符串
提取 nan 值最优雅的方法是 但我认为我的问题略有不同
df.loc[~df.index.isin(df.dropna().index)]
我也试图找到一些资源并阅读文档以了解为什么 pd.read_excel()
有这种行为,但我没有找到任何有用的东西。
这里是我尝试为可重现的问题创建的代码(但不起作用):
a=pd.Series(np.random.uniform(1.00,100.00,9000))
b=np.empty(400)
b=pd.Series(np.full_like(b,np.nan))
c=pd.Series('None')
start_dict={"Target":[0,2,3.5] }
df_t=pd.DataFrame(start_dict)
df_t=pd.concat([df_t,a],axis=0,ignore_index=True)
df_t=pd.concat([df_t,b],axis=0,ignore_index=True)
df_t=pd.concat([df_t,c],axis=0,ignore_index=True)
这是我打印 df_string
和 df_null
时的实际输出:
xlsx
文件中的黄色参考单元格:
类型使用不安全。由于列具有混合类型 pandas 将对所有行使用 object
类型。但是,您可以通过其他方式执行此操作。
首先创建空数据帧:
df_string = pd.DataFrame()
df_float = pd.DataFrame()
df_null = pd.DataFrame()
现在您需要创建一个函数来对您的原始 DataFrame 进行分类。 this question 的稍微修改版本应该做:
def categorize(x):
if x.isna():
df_null = df_null.append([x]) # append does not change the original df
return
try:
float(x)
except ValueError:
df_string = df_string.append([x])
else:
df_float = df_float.append([x])
现在您所要做的就是 apply
Target
列的函数。
df['Target'].apply(lambda x: categorize(x), axis=1)
根据我的具体问题,我尝试创建一个可重现的小示例,但没有达到目的。 附在问题的最后。
我目前正在阅读 27 excel 个文件。
所有的格式都一样(看起来所有的列都是一致的)。
我将此数据附加到由 9828 行和三列组成的单个 DataFrame 中。
名为"Target"的一列只能由浮点数或整数组成。
实际上构成目标列的单元格被读取为:
- 浮动
- 只有一种情况下,空单元格被读取为字符串
- 在其他情况下,空单元格被视为
None
为了了解哪个特定的 Column DataFrame 行包含 float/none/string 我创建了一种非常低效的方法来根据数据类型
检查和拆分数据框 dt_t is a dataframe with 3 columns one of this is called Target
This column is composed by 9398 non-null object.
The other two by 9828 non-null object.
df_string=pd.DataFrame()
df_float=pd.DataFrame()
df_null=pd.DataFrame()
for i in range(len(df_t.Target)):
if type(df_t.Target.loc[i])==str:
df_string=df_string.append(df_t.loc[i])
if type(df_t.Target.loc[i])==int or type(df_t.Target.loc[i])==float:
df_float=df_float.append(df_t.loc[i])
else:
df_null=df_null.append(df_t.loc[i])
不明白为什么:
存在重复。
df_string
和df_null
包含相同的值在浮动数据框中我还有
nan
个值
我的预期输出 是看到
- 一个数据帧中只有 float 和 int
- df_null 中只有 nan
- 只有 df_string 数据帧中的字符串
提取 nan 值最优雅的方法是
df.loc[~df.index.isin(df.dropna().index)]
我也试图找到一些资源并阅读文档以了解为什么 pd.read_excel()
有这种行为,但我没有找到任何有用的东西。
这里是我尝试为可重现的问题创建的代码(但不起作用):
a=pd.Series(np.random.uniform(1.00,100.00,9000))
b=np.empty(400)
b=pd.Series(np.full_like(b,np.nan))
c=pd.Series('None')
start_dict={"Target":[0,2,3.5] }
df_t=pd.DataFrame(start_dict)
df_t=pd.concat([df_t,a],axis=0,ignore_index=True)
df_t=pd.concat([df_t,b],axis=0,ignore_index=True)
df_t=pd.concat([df_t,c],axis=0,ignore_index=True)
这是我打印 df_string
和 df_null
时的实际输出:
xlsx
文件中的黄色参考单元格:
类型使用不安全。由于列具有混合类型 pandas 将对所有行使用 object
类型。但是,您可以通过其他方式执行此操作。
首先创建空数据帧:
df_string = pd.DataFrame()
df_float = pd.DataFrame()
df_null = pd.DataFrame()
现在您需要创建一个函数来对您的原始 DataFrame 进行分类。 this question 的稍微修改版本应该做:
def categorize(x):
if x.isna():
df_null = df_null.append([x]) # append does not change the original df
return
try:
float(x)
except ValueError:
df_string = df_string.append([x])
else:
df_float = df_float.append([x])
现在您所要做的就是 apply
Target
列的函数。
df['Target'].apply(lambda x: categorize(x), axis=1)