GVKun编程网logo

从具有多个字符串的列中获取get_dummies类型数据帧的最快方法(编写从多个字符串中寻找最长字符串的函数)

10

最近很多小伙伴都在问从具有多个字符串的列中获取get_dummies类型数据帧的最快方法和编写从多个字符串中寻找最长字符串的函数这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c–

最近很多小伙伴都在问从具有多个字符串的列中获取get_dummies类型数据帧的最快方法编写从多个字符串中寻找最长字符串的函数这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c – 从YYYYMMDDHHMMSS字符串获取time_t的最快方法、c# – 将字符串列表转换为单个连接字符串的最快方法?、Pandas 文本数据方法 get_dummies ()、Pandas 通过从另一个数据帧的 1 列中的单元格检查列表中返回匹配字符串的行来创建新的数据帧等相关知识,下面开始了哦!

本文目录一览:

从具有多个字符串的列中获取get_dummies类型数据帧的最快方法(编写从多个字符串中寻找最长字符串的函数)

从具有多个字符串的列中获取get_dummies类型数据帧的最快方法(编写从多个字符串中寻找最长字符串的函数)

我有一列“ col2”,其中包含字符串列表。我当前的代码太慢了,大约有2000个唯一的字符串(以下示例中的字母)和4000行。最终为2000列和4000行。

In [268]: df.head()Out[268]:    col1    col20   6       A,B1   15      C,G,A2   25      B

有没有一种快速的方法来使它成为假人格式?每个字符串都有其自己的列,并且如果该行在col2中具有该字符串,则在每个字符串的列中都有0或1。

In [268]: def get_list(df):d = []for row in df.col2:    row_list = row.split('','')    for string in row_list:        if string not in d:            d.append(string)return ddf_list = get_list(df)def make_cols(df, lst):    for string in lst:        df[string] = 0    return dfdf = make_cols(df, df_list)for idx in range(0, len(df[''col2''])):    row_list = df[''col2''].iloc[idx].split('','')    for string in row_list:        df[string].iloc[idx]+= 1Out[113]:col1    col2    A   B   C   G0   6   A,B     1   1   0   01   15  C,G,A   1   0   1   12   25  B       0   1   0   0

这是我目前的代码,但是太慢了。

谢谢您的帮助!

答案1

小编典典

您可以使用:

>>> df[''col2''].str.get_dummies(sep='','')   A  B  C  G0  1  1  0  01  1  0  1  12  0  1  0  0

要加入数据框:

>>> pd.concat([df, df[''col2''].str.get_dummies(sep='','')], axis=1)   col1   col2  A  B  C  G0     6    A,B  1  1  0  01    15  C,G,A  1  0  1  12    25      B  0  1  0  0

c – 从YYYYMMDDHHMMSS字符串获取time_t的最快方法

c – 从YYYYMMDDHHMMSS字符串获取time_t的最快方法

这是合法的吗?我试图尽可能快地得到time_t给定一个格式为YYYYMMDDHHMMSS的字符串.

static time_t ConvertToSecSince1970(char *szYYYYMMDDHHMMSS)
{
struct tm    Tm;    

    memset(&Tm,sizeof(Tm));
    Tm.tm_year = makeInt(szYYYYMMDDHHMMSS +  0,4) - 1900;
    Tm.tm_mon  = makeInt(szYYYYMMDDHHMMSS +  4,2) - 1;
    Tm.tm_mday = makeInt(szYYYYMMDDHHMMSS +  6,2);
    Tm.tm_hour = makeInt(szYYYYMMDDHHMMSS +  8,2);
    Tm.tm_min  = makeInt(szYYYYMMDDHHMMSS + 10,2);
    Tm.tm_sec  = makeInt(szYYYYMMDDHHMMSS + 12,2);
    return mktime(&Tm);
}

如果我使用以下方法创建TM,它似乎会产生相同的答案:

strptime(szYYYYMMDDHHMMSS,"%Y%m%d%H%M%s",&Tm);

我担心tm_yday,tm_wday,tm_isdst,tm_gmtoff,tm_zone很重要.我的日期是UTC,所以我认为gmtoff = 0和tm_zone = 0可能有效.

顺便说一句,这是makeInt:

inline int makeInt(const char *p,int size)
{
    const char *endp;
    int intval = 0;

    endp = p + size;
    while (p < endp)
    {
        intval = intval * 10 + *p - '0';
        p++;
    }
    return intval;
}

解决方法

mktime()忽略tm_wday和tm_yday字段,并根据其他字段计算它们的新值.这同样适用于BSD扩展tm_gmtoff和tm_zone,除了它们是从本地时区计算的.

但请注意,mktime()使用本地时间而不是UTC,因此如果您的输入日期是UTC,那么您的时区必须设置为UTC.

c# – 将字符串列表转换为单个连接字符串的最快方法?

c# – 将字符串列表转换为单个连接字符串的最快方法?

我有一些LINQ代码生成一个字符串列表,如下所示:
var data = from a in someOtherList
           orderby a
           select FunctionThatReturnsstring(a);

如何将该字符串列表转换成一个大连接字符串?假设数据有这些条目:

"Some "
"resulting "
"data here."

我应该使用一个如下所示的字符串:

"Some resulting data here."

我该如何快速做到这一点?我想到了这个:

StringBuilder sb = new StringBuilder();
data.ToList().ForEach(s => sb.Append(s));
string result = sb.ToString();

但这似乎不正确.如果是正确的解决方案,我该如何去做一个扩展方法?

解决方法

怎么样:
public static string Concat(this IEnumerable<string> source) {
    StringBuilder sb = new StringBuilder();
    foreach(string s in source) {
        sb.Append(s);
    }
    return sb.ToString();
}

和:

string s = data.Concat();

这样就不需要额外的ToList()/ ToArray()步骤了.

Pandas 文本数据方法 get_dummies ()

Pandas 文本数据方法 get_dummies ()

Series.str.get_dummies (sep=’|’) 分割字符串并返回各个字符的复杂矩阵
参数:
sep : 字符串,默认为 “|”
返回值:
数据框 (DataFrame)

>>> Series([''a|b'', np.nan, ''a|c'']).str.get_dummies()
   a  b  c
0  1  1  0
1  0  0  0
2  1  0  1

Pandas 通过从另一个数据帧的 1 列中的单元格检查列表中返回匹配字符串的行来创建新的数据帧

Pandas 通过从另一个数据帧的 1 列中的单元格检查列表中返回匹配字符串的行来创建新的数据帧

如何解决Pandas 通过从另一个数据帧的 1 列中的单元格检查列表中返回匹配字符串的行来创建新的数据帧?

我从 .csv 创建了一个数据框,其中包含超过 380 万行:

import pandas as pd
import csv

file_name = ''bigfile.csv''
bigfile_df = pd.read_csv (file_name,low_memory=False)

然后我要导入第二个 csv,我想将其作为我的列表:

input_df = pd.read_csv(''list.csv'',delimiter='','')

然后将其转换为列表:

l = input_df[''Column_Name''].tolist()

打印出来的样子:

[''Text Text Text'',''Text Text Text'',''Text Text Text'']

该列表相当大,包含超过 12,000 行并包含字符串。

我想要做的是获取列表中的每个条目,并检查 bigfile_df 中列 [''Name''] 的单元格内是否有任何匹配项,并创建一个包含这些匹配项的整行的新数据框。

我希望这一切都有意义,我已经寻找类似的例子来尝试回答这个问题,但找不到。预先感谢您的任何回复。

解决方法

您可以使用查询方法来实现:

output_dfs = []
for entry in l:
    output_dfs.append(bigfile_df.query(''Name == @entry'')

编辑:我可能误解了,如果你想要一个数据框,你可以这样做:

output_df = bigfile_df.query(''Name in @l'')

这将在 bigfile_df 的所有行中搜索在您的列表 l 中出现“Name”列值的行。

我们今天的关于从具有多个字符串的列中获取get_dummies类型数据帧的最快方法编写从多个字符串中寻找最长字符串的函数的分享已经告一段落,感谢您的关注,如果您想了解更多关于c – 从YYYYMMDDHHMMSS字符串获取time_t的最快方法、c# – 将字符串列表转换为单个连接字符串的最快方法?、Pandas 文本数据方法 get_dummies ()、Pandas 通过从另一个数据帧的 1 列中的单元格检查列表中返回匹配字符串的行来创建新的数据帧的相关信息,请在本站查询。

本文标签: