pandas factorize函数将一系列中的每个唯一值分配给基于0的顺序索引,并计算每个系列条目所属的索引.
我想pandas.factorize在多列上完成相同的操作:
import pandas as pd
df = pd.DataFrame({'x': [1, 1, 2, 2, 1, 1], 'y':[1, 2, 2, 2, 2, 1]})
pd.factorize(df)[0] # would like [0, 1, 2, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)
也就是说,我想确定数据帧的几列中每个唯一值的元组,为每个列分配一个顺序索引,并计算数据帧中每一行所属的索引.
Factorize仅适用于单列.pandas中有多列等效函数吗?
我使用twitteR包从twitter中提取推文并将其保存到文本文件中.
我在语料库上进行了以下操作
xx<-tm_map(xx,removeNumbers, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,stripWhitespace, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,removePunctuation, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,strip_retweets, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,removeWords,stopwords(english), lazy=TRUE, 'mc.cores=1')
Run Code Online (Sandbox Code Playgroud)
(使用mc.cores = 1和lazy = True,否则Mac上的R运行错误)
tdm<-TermDocumentMatrix(xx)
Run Code Online (Sandbox Code Playgroud)
但是这个术语文档矩阵有很多奇怪的符号,无意义的单词等.如果推文是
RT @Foxtel: One man stands between us and annihilation: @IanZiering.
Sharknado‚Äã 3: OH HELL NO! - July 23 on Foxtel @SyfyAU
Run Code Online (Sandbox Code Playgroud)
清理完推文后,我只想留下适当的完整英文单词,即句子/短语无效(用户名,缩短的单词,网址)
例:
One man stands between us and annihilation oh hell no on
Run Code Online (Sandbox Code Playgroud)
(注意:tm包中的转换命令只能删除停用词,标点符号空格以及转换为小写)
我有一个数据库,旧代码喜欢在Date和DateTime列中插入'0000-00-00'而不是实际日期.所以我有以下两个问题:
跟进:
默认值已设置为null.很久以前,默认是'0000-00-00'.一些代码仍然明确地放置'0000-00-00'.我宁愿强制该代码抛出错误,以便我可以隔离并删除它.
应用于pandas.to_numeric包含表示数字(以及可能的其他不可解析字符串)的字符串的数据帧列会导致出现如下错误消息:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-66-07383316d7b6> in <module>()
1 for column in shouldBeNumericColumns:
----> 2 trainData[column] = pandas.to_numeric(trainData[column])
/usr/local/lib/python3.5/site-packages/pandas/tools/util.py in to_numeric(arg, errors)
113 try:
114 values = lib.maybe_convert_numeric(values, set(),
--> 115 coerce_numeric=coerce_numeric)
116 except:
117 if errors == 'raise':
pandas/src/inference.pyx in pandas.lib.maybe_convert_numeric (pandas/lib.c:53558)()
pandas/src/inference.pyx in pandas.lib.maybe_convert_numeric (pandas/lib.c:53344)()
ValueError: Unable to parse string
Run Code Online (Sandbox Code Playgroud)
看看哪个值无法解析会不会有帮助?
当我不使用管道时,我可以使用此命令更改原始daframe
df<-slice(df,-c(1:3))%>% # delete top 3 rows
df<-select(df,-c(Col1,Col50,Col51)) # delete specific columns
Run Code Online (Sandbox Code Playgroud)
如何使用管道做到这一点?我试过这个但是slice和select函数不会改变原始数据帧.
df%>%
slice(-c(1:3))%>%
select(-c(Col1,Col50,Col51))
Run Code Online (Sandbox Code Playgroud)
我想改变原来的df.
我正在研究HCUP数据,它在一个列中有一系列值,需要拆分成多列.以下是HCUP数据框供参考:
code label
61000-61003 excision of CNS
0169T-0169T ventricular shunt
Run Code Online (Sandbox Code Playgroud)
期望的输出应该是:
code label
61000 excision of CNS
61001 excision of CNS
61002 excision of CNS
61003 excision of CNS
0169T ventricular shunt
Run Code Online (Sandbox Code Playgroud)
我解决这个问题的方法是使用包splitstackshape并使用此代码
library(data.table)
library(splitstackshape)
cSplit(hcup, "code", "-")[, list(code = code_1:code_2, by = label)]
Run Code Online (Sandbox Code Playgroud)
这种方法会导致内存问题.有没有更好的方法来解决这个问题?
一些评论:
我有一个数据框,如下所示
dist <- c(1.1,1.0,10.0,5.0,2.1,12.2,3.3,3.4)
id <- rep("A",length(dist))
df<-cbind.data.frame(id,dist)
df
id dist
1 A 1.1
2 A 1.0
3 A 10.0
4 A 5.0
5 A 2.1
6 A 12.2
7 A 3.3
8 A 3.4
Run Code Online (Sandbox Code Playgroud)
我需要清理它,因此dist列中的行值在任何时候都不会大于下一行值的2倍.清理后的数据框如下所示:
id dist
1 A 1.1
2 A 1.0
5 A 2.1
7 A 3.3
8 A 3.4
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用for循环和if语句来清理它
cleaner <- function (df,dist,times_larger) {
for (i in 1:(nrow(df)-1)) {
if (df$dist[i] > df$dist[i+1]*times_larger){
df<-df[-i,]
break
}
}
df
}
Run Code Online (Sandbox Code Playgroud)
显然,如果我不打破循环,它将产生错误,因为df中的行数将在此过程中发生变化.如果我在df上手动运行循环几次:
df<-cleaner(df,"dist",2)
Run Code Online (Sandbox Code Playgroud)
它将按我的要求清理.
我也尝试了不同的函数结构,并将其应用于数据框,但没有任何运气.
有没有一个很好的建议,如何重复数据框上的功能,直到它不再改变,更好的功能结构或更好的清洁方式?
任何建议都非常感谢
我有一个数据集存储为data.table DT,如下所示:
print(DT)
category industry
1: administration admin
2: nurse practitioner truck
3: trucking truck
4: administration admin
5: warehousing nurse
6: warehousing admin
7: trucking truck
8: nurse practitioner nurse
9: nurse practitioner truck
Run Code Online (Sandbox Code Playgroud)
我想将表格减少到只有行业与该类别匹配的行.我的一般方法是使用grepl()正则表达式匹配字符串'^{{INDUSTRY}}[a-z ]+$'和每一行DT$category,每个对应的行DT$industry插入在{{INDUSTRY}}正则表达式字符串中使用infuse().我很难找到一个时髦的data.table解决方案,它可以正确地循环遍历表并进行行内比较,所以我使用for循环来完成工作:
template <- "^{{IND}}[a-z ]+$"
DT[,match := FALSE,]
for (i in seq(1,length(DT$category))) {
ind <- DT[i]$industry
categ <- d.daily[i]$category
if (grepl(infuse(IND=ind,template),categ)){
DT[i]$match <- TRUE
}
}
DT<- DT[match==TRUE]
print(DT)
category industry …Run Code Online (Sandbox Code Playgroud) pandas 开发新手。如何使用先前看到的列中包含的值向前填充 DataFrame?
独立的示例:
import pandas as pd
import numpy as np
O = [1, np.nan, 5, np.nan]
H = [5, np.nan, 5, np.nan]
L = [1, np.nan, 2, np.nan]
C = [5, np.nan, 2, np.nan]
timestamps = ["2017-07-23 03:13:00", "2017-07-23 03:14:00", "2017-07-23 03:15:00", "2017-07-23 03:16:00"]
dict = {'Open': O, 'High': H, 'Low': L, 'Close': C}
df = pd.DataFrame(index=timestamps, data=dict)
ohlc = df[['Open', 'High', 'Low', 'Close']]
Run Code Online (Sandbox Code Playgroud)
这会产生以下数据帧:
print(ohlc)
Open High Low Close
2017-07-23 03:13:00 1.0 5.0 1.0 5.0
2017-07-23 03:14:00 …Run Code Online (Sandbox Code Playgroud) 我正在清理我的data frameSumcription 中的一个列,并尝试做 3 件事:
删除停用词
import spacy
nlp = spacy.load('en_core_web_sm', parser=False, entity=False)
df['Tokens'] = df.Sumcription.apply(lambda x: nlp(x))
spacy_stopwords = spacy.lang.en.stop_words.STOP_WORDS
spacy_stopwords.add('attach')
df['Lema_Token'] = df.Tokens.apply(lambda x: " ".join([token.lemma_ for token in x if token not in spacy_stopwords]))
Run Code Online (Sandbox Code Playgroud)但是,当我打印例如:
df.Lema_Token.iloc[8]
Run Code Online (Sandbox Code Playgroud)
输出中仍然包含单词 attach :
attach poster on the wall because it is cool
为什么它不删除停用词?
我也试过这个:
df['Lema_Token_Test'] = df.Tokens.apply(lambda x: [token.lemma_ for token in x if token not in spacy_stopwords])
Run Code Online (Sandbox Code Playgroud)
但是 strattach仍然出现。
data-cleaning ×10
r ×5
python ×4
pandas ×3
data-science ×2
data.table ×2
dataframe ×2
date ×1
datetime ×1
dplyr ×1
enumeration ×1
medical ×1
mysql ×1
nlp ×1
python-3.7 ×1
regex ×1
spacy ×1
text-mining ×1
twitter ×1