我有一本字典,其中的列表如:
cols = {'animals':['dog','cat','fish'],
'colors':['red','black','blue','dog']}
Run Code Online (Sandbox Code Playgroud)
我想将其转换为一个数据框,其中每个列表根据其键枚举,结果为
key variable
animals dog
animals cat
animal fish
colors red
colors black
colors blue
colors dog
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经做到了这一点:但是它并没有为我提供理想的结果。
cols_df = pd.DataFrame.from_dict(cols, orient='index')
Run Code Online (Sandbox Code Playgroud)
我该如何修改以达到上述目的?
我需要重新排序此(制表符分隔)数据的列:
1 cat plays
1 dog eats
1 horse runs
1 red dog
1 the cat
1 the cat
Run Code Online (Sandbox Code Playgroud)
所以这是打印像:
cat plays 1
dog eats 1
horse runs 1
red dog 1
the cat 2
Run Code Online (Sandbox Code Playgroud)
我试过了:
sort [input] | uniq -c | awk '{print $2 "\t" $3 "\t" $1}' > [output]
Run Code Online (Sandbox Code Playgroud)
结果是:
1 cat 1
1 dog 1
1 horse 1
1 red 1
2 the 1
Run Code Online (Sandbox Code Playgroud)
谁能给我一些关于出了什么问题的见解?谢谢.
我正在尝试在WEKA中运行分类器,使用以下命令行使用J48分类器:
$ java -Xmx2048m -cp /home/weka-3-7-9/weka.jar weka.classifiers.trees.J48 -t input.arff -i -k -d J48-data.model &
Run Code Online (Sandbox Code Playgroud)
虽然我的arff的大小是43.8 M,我把堆空间调到2048m,但我仍然收到以下错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.ArrayList.<init>(ArrayList.java:132)
at weka.core.Instances.initialize(Instances.java:196)
at weka.core.Instances.<init>(Instances.java:177)
at weka.classifiers.trees.j48.ClassifierSplitModel.split(ClassifierSplitModel.java:252)
at weka.classifiers.trees.j48.ClassifierTree.buildTree(ClassifierTree.java:159)
at weka.classifiers.trees.j48.C45PruneableClassifierTree.buildClassifier(C45PruneableClassifierTree.java:126)
at weka.classifiers.trees.J48.buildClassifier(J48.java:249)
at weka.classifiers.evaluation.Evaluation.evaluateModel(Evaluation.java:1485)
at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:649)
at weka.classifiers.AbstractClassifier.runClassifier(AbstractClassifier.java:297)
at weka.classifiers.trees.J48.main(J48.java:1062)
Run Code Online (Sandbox Code Playgroud)
有人知道我做错了吗?或者可以指出一个不同的解决方案来增加堆?
先感谢您.
我想随机80/20使用awk拆分文件.
我已阅读并尝试了在此处找到的选项,其中包含以下内容:
$ awk -v N=`cat FILE | wc -l` 'rand()<3000/N' FILE
Run Code Online (Sandbox Code Playgroud)
如果你想随机选择,效果很好.
但是,是否可以更改此awk以将一个文件拆分为两个80/20(或任何其他)比例的文件?
我试图用一个dictionary key来代替strings在pandas其列values。但是,每一列都包含句子。因此,我必须首先标记这些句子,并检测该句子中的单词是否与我的词典中的键相对应,然后将字符串替换为相应的值。
但是,结果我仍然一无所获。有没有更好的pythonic方法来解决此问题?
这是我目前的MVC。在评论中,我指定了问题发生的位置。
import pandas as pd
data = {'Categories': ['animal','plant','object'],
'Type': ['tree','dog','rock'],
'Comment': ['The NYC tree is very big','The cat from the UK is small','The rock was found in LA.']
}
ids = {'Id':['NYC','LA','UK'],
'City':['New York City','Los Angeles','United Kingdom']}
df = pd.DataFrame(data)
ids = pd.DataFrame(ids)
def col2dict(ids):
data = ids[['Id', 'City']]
idDict = data.set_index('Id').to_dict()['City']
return idDict
def replaceIds(data,idDict):
ids = idDict.keys()
types = idDict.values()
data['commentTest'] = data['Comment']
words = data['commentTest'].apply(lambda …Run Code Online (Sandbox Code Playgroud) 我想计数的各种频率ngrams使用ngram和freqDist功能nltk。由于ngram函数输出是一个generator对象,我想在计算频率之前合并每个 ngram 的输出。但是,我遇到了合并各种生成器对象的问题。
我试过itertools.chain,它创建了一个itertools对象,而不是合并生成器。我终于确定了permutations,但之后解析对象似乎是多余的。
到目前为止的工作代码是:
import nltk
from nltk import word_tokenize, pos_tag
from nltk.collocations import *
from itertools import *
from nltk.util import ngrams
import re
corpus = 'testing sentences to see if if if this works'
token = word_tokenize(corpus)
unigrams = ngrams(token,1)
bigrams = ngrams(token,2)
trigrams = ngrams(token,3)
perms = list(permutations([unigrams,bigrams,trigrams]))
fdist = nltk.FreqDist(perms)
for x,y in fdist.items():
for k in …Run Code Online (Sandbox Code Playgroud) 我有各种名字的文件
"type_featAtype_featB"
和
"type_featAtype_featC"
我需要这一切
"type_featA"
被替换为
"开始"
所以将调用文件夹的新名称
"STARTtype_featB"
和
STARTtype_featC"
.
但是,并非所有文件都具有相同的后缀,实际上它们都有不同的后缀,如示例中所示.
因此,我正在寻找有关如何使用命令来替换文件名的一部分的见解,如上面在一个文件夹中所示,其中每个文件具有唯一的后缀.谢谢
预先感谢您的任何帮助.
我有如下所示的数据(4 列和制表符分隔):
AAA 123 null 0
AAA 124 null 1
BBB 234 null 0
CCC 235 negative -2
CCC 345 negative 2
DDD 346 null -1
EEE 456 positive 4
EEE 457 positive 0
Run Code Online (Sandbox Code Playgroud)
使用这些数据,我需要编写一个条件语句,如果满足第 3 列和第 4 列中的两个条件,则在第 5 列中打印单词“TRUE”,否则打印单词“FALSE”。
尝试使用 嵌套“IF”语句python,我编写了以下代码:
with open('infile.input', "r") as opened_file:
for gLine in opened_file:
print gLine
oneID, twoID, oneScore, twoScore = gLine.split()
if oneScore == "positive" and twoScore > 0:
if oneScore == "null" and twoScore == 0:
if oneScore …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Wordcloud2in构建一个词云R,以便利用 Shiny。我必须做的一件非常重要的事情是保持在词云中表示的固定最大单词数(例如 150)。因此,无论可用的单词数量有多少,我只想在云中可视化最多 150 个单词。在 中Wordcloud,该参数max.words=可用。但是,我无法找到Wordcloud2允许我添加此参数的等效内容。我对此做了很多研究,但似乎找不到它。我的代码Wordcloud2非常简单
mr = table(data, header=TRUE)
wordcloud2(mr, color = ifelse(mr[, 3] > 0, 'green', 'red'), fontWeight = "bold")
Run Code Online (Sandbox Code Playgroud)
我是否可以添加任何参数(例如max.words=(在 中可用Wordcloud))以保证我的云中不再出现 X 个单词?
我的数据是3列,例如:
WORD VALUE SENT
1 topnotch 1 1
2 good 2 1
3 nice 11 0
4 inspired 14 0
5 beautiful 21 0
Run Code Online (Sandbox Code Playgroud) 我有看起来像这样的文件名:
act-art-atr-phm-pro-psy
act-art-atr-phm-pro-sta
act-art-atr-pro-psy-rel-sta
act-art-atr-pro-tme
act-art-atr-psy
act-art-atr-psy-qud-sta
act-art-atr-psy-sta
act-art-atr-rel
act-art-atr-sta
act-art-com
Run Code Online (Sandbox Code Playgroud)
我想要cat包含至少两个我手动指示的特定单词(以“-”分隔)的文件。
例如:我想要cat所有至少包含“act”和“psy”的文件,因此生成的文件将包含文件中的所有内容
act-art-atr-phm-pro-psy
act-art-atr-pro-psy-rel-sta
act-art-atr-psy
act-art-atr-psy-qud-sta
act-art-atr-psy-sta
Run Code Online (Sandbox Code Playgroud)
我不确定能够做到这一点的直接正则表达式,因为每个文件的文件名顺序都是唯一的。
是否有特定regex的文件可以搜索包含至少 2 个以“-”分隔的三个字母名称cat的文件,我可以将其用于所有相应的文件?
或者,如果我提出的regex+cat策略不是最好的,那么甚至可以采用更有效的方法来处理此任务。
我正在尝试使用过滤pandas数据框regular expressions。我想删除那些不包含任何字母的行。例如:
Col A.
50000
$927848
dog
cat 583
rabbit 444
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
Col A.
dog
cat 583
rabbit 444
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用regexand pandas过滤器选项解决不成功的问题。见打击。当我尝试合并过滤器的两个条件时,我特别遇到了问题。我该如何实现?
选项1:
df['Col A.'] = ~df['Col A.'].filter(regex='\d+')
Run Code Online (Sandbox Code Playgroud)
选项2
df['Col A.'] = df['Col A.'].filter(regex=\w+)
Run Code Online (Sandbox Code Playgroud)
选项3
from string import digits, letters
df['Col A.'] = (df['Col A.'].filter(regex='|'.join(letters)))
Run Code Online (Sandbox Code Playgroud)
要么
df['Col A.'] = ~(df['Col A.'].filter(regex='|'.join(digits)))
Run Code Online (Sandbox Code Playgroud)
要么
df['Col A.'] = df[~(df['Col A.'].filter(regex='|'.join(digits))) & (df['Col A.'].filter(regex='|'.join(letters)))]
Run Code Online (Sandbox Code Playgroud) python ×4
dataframe ×3
pandas ×3
python-2.7 ×3
awk ×2
dictionary ×2
regex ×2
cat ×1
command-line ×1
conditional ×1
file ×1
file-rename ×1
generator ×1
grep ×1
heap ×1
if-statement ×1
list ×1
nltk ×1
r ×1
random ×1
rename ×1
replace ×1
split ×1
weka ×1
word-cloud ×1