Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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
如何将一列拆分为多个列,然后在SQL或Pandas中计算新列中的空值?_Sql_Database_Pandas - Fatal编程技术网

如何将一列拆分为多个列,然后在SQL或Pandas中计算新列中的空值?

如何将一列拆分为多个列,然后在SQL或Pandas中计算新列中的空值?,sql,database,pandas,Sql,Database,Pandas,我有一个相对较大的表,有数千行和几十列。有些列是元数据,有些是数值。我遇到的问题是,某些元数据列不完整或不完整,也就是说,它缺少了a:。我想数一数,其中有多少是冒号标记后缺失的部分 如果你看下面的小例子,我会得到一个小表,告诉我在a组中,元数据在2个条目中是完整的,在其他2个条目中是不完整的。理想情况下,我还想获得一些关于某个值计数、最大值、最小值等的统计信息 如何在SQL查询或Python中执行此操作? 使用一些内置函数可能会很简单,但是,我没有正确地理解它 数据: 预期产出结果: Group

我有一个相对较大的表,有数千行和几十列。有些列是元数据,有些是数值。我遇到的问题是,某些元数据列不完整或不完整,也就是说,它缺少了a:。我想数一数,其中有多少是冒号标记后缺失的部分

如果你看下面的小例子,我会得到一个小表,告诉我在a组中,元数据在2个条目中是完整的,在其他2个条目中是不完整的。理想情况下,我还想获得一些关于某个值计数、最大值、最小值等的统计信息

如何在SQL查询或Python中执行此操作? 使用一些内置函数可能会很简单,但是,我没有正确地理解它

数据:

预期产出结果:

Group MetaDataComplete Count
A     Yes               2
A     No                2
以下是一个例子:

1-创建数据帧 在[1]中: 作为pd进口熊猫 将numpy作为np导入 cols=['Group','MetaData','SomeValue'] 数据=['A','AB:xxx',20], [A',AB:',5], [A',PQ:yyy',30], [A',PQ:',2] ] df=pd.DataFramecolumns=cols,data=data 2-具有拆分值列的新数据框 new=df[MetaData].str.split:,n=1,expand=True df[MetaData_1]=新的[0] df[MetaData_2]=新的[1] 3-删除旧的元数据列 df.dropcolumns=[元数据],inplace=True 4-将空字符串替换为nan并计数 df.replace,np.NaN,inplace=True df.isnull.sum 出[1]: 第0组 SomeValue 0 元数据1 0 元数据2 数据类型:int64 以下是一个例子:

1-创建数据帧 在[1]中: 作为pd进口熊猫 将numpy作为np导入 cols=['Group','MetaData','SomeValue'] 数据=['A','AB:xxx',20], [A',AB:',5], [A',PQ:yyy',30], [A',PQ:',2] ] df=pd.DataFramecolumns=cols,data=data 2-具有拆分值列的新数据框 new=df[MetaData].str.split:,n=1,expand=True df[MetaData_1]=新的[0] df[MetaData_2]=新的[1] 3-删除旧的元数据列 df.dropcolumns=[元数据],inplace=True 4-将空字符串替换为nan并计数 df.replace,np.NaN,inplace=True df.isnull.sum 出[1]: 第0组 SomeValue 0 元数据1 0 元数据2 数据类型:int64
如果您的计算机刚刚完成计数,您也可以尝试算法方法。只需在数据上循环并使用具有负前瞻性的正则表达式

import pandas as pd
import re

pattern = '.*:(?!.)' # detects the strings of the missing data form
missing = 0
not_missing = 0
for i in data['MetaData'].tolist():
    match = re.findall(pattern, i)
    if match:
        missing += 1
    else:
        not_missing += 1

如果您的计算机刚刚完成计数,您也可以尝试算法方法。只需在数据上循环并使用具有负前瞻性的正则表达式

import pandas as pd
import re

pattern = '.*:(?!.)' # detects the strings of the missing data form
missing = 0
not_missing = 0
for i in data['MetaData'].tolist():
    match = re.findall(pattern, i)
    if match:
        missing += 1
    else:
        not_missing += 1

从SQL的角度来看,执行拆分是痛苦的,更不用说使用拆分结果时必须先执行查询,然后再查询结果:

选择 结果【组】, 结果.元数据, 结果:元价值, COUNTResults.MetaValue 从选择 [小组] 元数据, SUBSTRINGMetaData,CHARINDEX':',MetaData+1,LENMetaData作为元值 从VeryLargeTable作为结果 按结果分组。[分组], 结果.元数据, 结果:元值
从SQL的角度来看,执行拆分是痛苦的,更不用说使用拆分结果时必须先执行查询,然后再查询结果:

选择 结果【组】, 结果.元数据, 结果:元价值, COUNTResults.MetaValue 从选择 [小组] 元数据, SUBSTRINGMetaData,CHARINDEX':',MetaData+1,LENMetaData作为元值 从VeryLargeTable作为结果 按结果分组。[分组], 结果.元数据, 结果:元值
除非值可以包含冒号字符,否则没有理由使用拆分函数。我只想假设空值在技术上不是正确的单词,而是以:

您还可以使用rightMetaData,1=':'


或者假设值可以包含自己的冒号,如果您只想询问第一个冒号是否位于最后一个位置,请尝试charindex“:”,MetaData=lenMetaData。

除非值可以包含冒号字符,否则没有理由使用拆分函数。我只想假设空值在技术上不是正确的单词,而是以:

您还可以使用rightMetaData,1=':'


或者假设值可以包含自己的冒号,如果您只想询问第一个冒号是否位于最后一个位置,请尝试charindex“:”,MetaData=lenMetaData。

第一部分“拆分”似乎是一个重复的问题。拆分后,您可以使用groupby并计算空值的数量。第一部分拆分的可能重复似乎是一个重复的问题。拆分后,您可以使用groupby并计算空值的数量可能重复的感谢,但我认为这给出了部分答案。它没有给出未丢失元数据的计数。谢谢,但我认为这给出了部分答案。它没有给出未丢失元数据的计数。谢谢!我想这就是我要尝试的。我更愿意生成
此表包含SQL查询。谢谢!我想这就是我要尝试的。我更愿意使用SQL查询生成此表。
select
    "Group",
    case when MetaData like '%:' then 'Yes' else 'No' end as MetaDataComplete,
    count(*) as "Count"
from T
group by "Group", case when MetaData like '%:' then 'Yes' else 'No' end